bounty将在20小时后到期。回答此问题可获得+50声望奖励。rbhalla希望引起更多关注这个问题。
我在VS Code中打开一个monorepo文件夹,其中顶部的文件夹是不同的服务。其中一个服务是一个python服务,它使用poetic来安装依赖项。
我使用poetry的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
如果我查看./python-service/.venv/bin/python
文件,我可以看到它实际上是一个指向/usr/local/bin/python
的符号链接,它不存在于我的机器上,只存在于容器上。
由于VS Code运行在我的机器上,而不是容器上,所以它不能遵循这个符号链接是有道理的。
我考虑了两个选择:
1.使用诗歌的always-copy
virtualenv
选项。由于某种原因,这并没有实际复制python
二进制文件(replicated by someone else)。所以这并不能解决问题。
- VS Code的开发容器插件。虽然这在理论上是可行的,但必须为每个python服务打开一个新窗口似乎很麻烦。理想情况下,VS Code能够根据需要使用适当的venv。
如何正确配置poetry/vscode/docker以确保在VS Code中可以设置解释器?
1条答案
按热度按时间mrphzbgm1#
以下是我能想到的想法:
假设:
python
版本保持不变make
和poetry
我将使用
makefile
或bash script
触发
make venvs
作为postCreateCommand
在.devcontainer/devcontainer.json
文件中安装所有服务venv我还没有尝试过,理想情况下应该工作与一些变通办法