2022 年 9 月如何使用 VSCode、Docker 和 Python
2022 年 9 月如何使用 VSCode、Docker 和 Python
MJT + Stable Diffusion 2022
我是一位经验丰富的编码员,但我不是 Python 专家。
最近我越来越喜欢机器学习,因此也越来越多地与 Python 进行交互。
老实说,我承认我已经避免使用 Python,因为它让我感到沮丧。
但唯一没有被抱怨的工具是从未使用过的工具。任何有用的东西都有它的缺陷。 😃
我如何处理 Python 并保持理智
与许多“早期”语言一样,Python 存在依赖管理和版本控制问题。这个恕我直言 心 Python 中的大多数问题,并且只要我知道它就一直困扰着这门语言。
我采用了以下工具和模式,截至今天,这些工具和模式可以很好地隔离环境并保持我的工作效率。
Pipenv
我直接在我的 loptop 硬件上使用以下环境变量进行开发:
# pipenv 在本地项目目录中创建 .venv 类似于 node_modules export PIPENV_VENV_IN_PROJECT=1
导出 PIPENV_VERBOSITY=-1
以上将创建一个 .venv
项目根目录下。这允许 VSCode 自动检测虚拟环境,例如代码完成、终端 CLI 执行等。
Pipfile 本身似乎可以用于捕获依赖项。我确信在传递依赖处理等方面存在挫败感,但它的工作原理已经足够好了。请注意,这个工具的选择是 Python 的“战斗”的核心,因此这个建议将来可能会发生变化,并且是我最不满意的一个。
VSCode“远程”开发
可能需要在类似 linux 的环境中部署 Python 代码。
多年来,我个人发现在尽可能接近“生产环境”的环境中进行开发更容易。
容器化开发是“严肃的 Python”恕我直言的“必备品”。这种语言 (AI/ML) 的主要用例涉及将其用作“胶水语言”。大多数繁重的工作将在“本机库”代码中完成。在 2022 年“本机”===“某些特定的 Linux 变体”。
可以在这里找到容器化开发的设置: https://code.visualstudio.com/docs/remote/containers-tutorial
注意:您需要(重新)安装 Python VSCode 插件作为“远程开发插件” https://marketplace.visualstudio.com/items?itemName=ms-python.python 创建容器后。
在初始设置您的“远程容器”之后(恕我直言,这有点用词不当):
至 .devcontainer/devcontainer.json
添加:
“远程环境”:{
"PIPENV_VENV_IN_PROJECT":"1",
“PIPENV_VERBOSITY”:“-1”
}
我还建议添加到同一个文件中:
“postCreateCommand”:“触摸 /root/.bashrc”
由于大多数容器不会为 root 交互式 shell 设置
建议使用相同的 Dockerfile 用于开发(或至少尽可能接近),并在设置 VSCode 'Remote Container' 时使用'Remote Container from Dockerfile' 选项。
用于玩 Python 的示例 Dockerfile
FROM ubuntu:22.04 运行 apt-get 更新
RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata
运行 apt-get install -y software-properties-common
运行 add-apt-repository -y ppa:deadsnakes/ppa
运行 apt-get install -y python3.9
运行 apt-get install -y python3.9-distutils
运行 apt-get install -y pip
# 修复恼人的弃用警告错误[ https://askubuntu.com/a/1407138](https://askubuntu.com/a/1407138)
运行 pip install --upgrade --user setuptools==58.3.0 运行 pip install pipenv
总结与预测
用于 ML 的 Python 是 “胶水语言” 关于依赖管理和语言兼容性的不幸故事。
幸运的是,有一些工具/技术,例如 Docker Containers 和 'python 虚拟环境' 人们可以采用以充分利用混乱的情况。
预测:
- Pipenv/Pipfile 可能会被替换,但 .venv 或其等价物/祖先会保留并希望存在于项目文件夹中。
- “远程”容器开发将越来越成为一种公认的标准开发技术。
- 随着 ML 狂热逐渐成熟为一门独特的学科,对 Python 的需求将被取代,因为社区趋向于可以在任何相应的“虚拟机”上运行的公认“汇编语言”(一旦他们同意,可能基于 Tensorflow 或 ONNX类似的东西 'POSIX' I/O 层/标准)。一样多 WASM / 瓦西 无需使用 Javascript 语言进行“网络开发”。
- Python 将在不久的将来继续作为一种备受诟病的必需品,并将执行与今天的“Bash”类似的功能:丑陋、通用和“足够好”。
最初发表于 https://github.com/matthewjosephtaylor .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明