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

irtuqstp  于 2023-04-29  发布在  Docker
关注(0)|答案(1)|浏览(137)

bounty将在20小时后到期。回答此问题可获得+50声望奖励。rbhalla希望引起更多关注这个问题。

我在VS Code中打开一个monorepo文件夹,其中顶部的文件夹是不同的服务。其中一个服务是一个python服务,它使用poetic来安装依赖项。
我使用poetry的in-project=truevirtualenv设置,以便所有依赖项实际存储在./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

如果我查看./python-service/.venv/bin/python文件,我可以看到它实际上是一个指向/usr/local/bin/python的符号链接,它不存在于我的机器上,只存在于容器上。
由于VS Code运行在我的机器上,而不是容器上,所以它不能遵循这个符号链接是有道理的。
我考虑了两个选择:
1.使用诗歌的always-copyvirtualenv选项。由于某种原因,这并没有实际复制python二进制文件(replicated by someone else)。所以这并不能解决问题。

  1. VS Code的开发容器插件。虽然这在理论上是可行的,但必须为每个python服务打开一个新窗口似乎很麻烦。理想情况下,VS Code能够根据需要使用适当的venv。
    如何正确配置poetry/vscode/docker以确保在VS Code中可以设置解释器?
mrphzbgm

mrphzbgm1#

以下是我能想到的想法:
假设:

  • 用python开发环境:3.XX-slim-牛眼
  • 所有服务的全局python版本保持不变
  • 全局安装makepoetry

我将使用makefilebash script

venvs: service1 service2

service1_venv:
    poetry install -C service1
service2_venv:
    poetry install -C service2

触发make venvs作为postCreateCommand.devcontainer/devcontainer.json文件中安装所有服务venv
我还没有尝试过,理想情况下应该工作与一些变通办法

相关问题