使用 Docker 和诗歌时在 VS Code 中选择 Python 解释器

rbh*_*lla 6 python docker visual-studio-code python-poetry

我在 VS Code 中打开一个 monorepo 文件夹,其中顶部文件夹是不同的服务。其中一项服务是使用诗歌来安装依赖项的 python 服务。

我正在使用诗歌的in-project=true virtualenv设置,以便所有依赖项实际上都存储在./python-service/.venv.

monorepo 可以使用 docker-compose 文件在本地运行。因此,任何依赖项安装都是在容器上完成的。

VS Code 不会自动检测这个虚拟环境,但是手动设置时,会立即出错:

Linter 'flake8' is not installed. Please install it or select another linter".
Error: spawn /Users/me/dev/project/python-service/.venv/bin/python EACCES
Run Code Online (Sandbox Code Playgroud)

如果我查看该./python-service/.venv/bin/python文件,我可以看到它实际上是一个符号链接,指向的符号链接/usr/local/bin/python在我的计算机上不存在,仅在容器上存在。

由于 VS Code 在我的计算机上运行,​​而不是在容器上运行,因此它无法遵循此符号链接是有道理的。

我考虑过两种选择:

  1. 使用诗歌的always-copy virtualenv选项。由于某种原因,这实际上并没有复制python二进制文件(由其他人复制)。所以这实际上并不能解决这个问题。
  2. VS Code 的开发容器插件。虽然这在理论上可行,但必须为每个 python 服务打开一个新窗口似乎很麻烦。理想情况下,VS Code 能够根据需要使用适当的 venv。

配置诗歌/vscode/docker 以确保可以在 VS Code 中设置解释器的正确方法是什么?

小智 0

这是我能想到的想法:-

假设:

  • 使用 python:3.XX-slim-bullseye 的开发环境
  • python所有服务的全球版本保持不变
  • makepoetry在全球范围内安装

我会利用makefilebash script

venvs: service1 service2

service1_venv:
    poetry install -C service1
service2_venv:
    poetry install -C service2
Run Code Online (Sandbox Code Playgroud)

按照文件中的make venvs方式触发以安装所有 venv 服务postCreateCommand.devcontainer/devcontainer.json

我还没有尝试过,理想情况下应该有一些解决方法