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 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/33202/59081308

posted @ 2022-09-13 09:00  哈哈哈来了啊啊啊  阅读(433)  评论(0编辑  收藏  举报