Poetry 未在 venv 中安装软件包

1 python virtualenv python-3.x python-poetry

我是诗歌新手,我有一个问题,在网上找不到太多有关信息。我的诗歌应该创建一个 python 3.9 的虚拟环境,它做到了。这是我从命令中得到的poetry env info

Virtualenv
Python:         3.9.10
Implementation: CPython
Path:           /home/..../.venv
Valid:          True

System
Platform: linux
OS:       posix
Python:   /usr
Run Code Online (Sandbox Code Playgroud)

当我输入poetry shellthen时python,我确实进入了 python 3.9,并且能够导入已安装的软件包。但这是奇怪的部分。当我尝试检查已安装的软件包之一时,我得到的结果如下:

>>> import XXX.python_utils as utils
>>> utils
<module 'XXX.python_utils' from '/home/X/.local/lib/python3.9/site-packages/XXX/python_utils/__init__.py'>
Run Code Online (Sandbox Code Playgroud)

我的机器上确实安装了实际的 python 3.9,但 Poetry 应该在 virtualenv 中安装该包,而不是实际的 python3.9 site_packages,对吗?然后我尝试在我的机器上安装 python 3.9 而不是虚拟环境,包仍然可以导入。结果与上面相同。

然后我仔细检查了里面的东西.venv/lib/python3.9/site-packages,里面基本上什么都没有。我发现的是一些带有包名称并以.dist-info. 我不确定那是什么。

我也尝试which pythonpoetry shell,这就是我得到的:

(.venv) XXX@XXX:~/XXX$ which python
/home/.../.venv/bin/python
Run Code Online (Sandbox Code Playgroud)

看来诗歌确实在 venv 中使用了 python 3.9

最后,每次我运行 a 时poetry install,它都会安装所有软件包,即使我没有更改我的任何内容pyproject.yaml,这似乎poetry.lock没有任何意义。

rek*_*nyz 7

你可以尝试:

poetry env remove python
poetry config virtualenvs.in-project true
Run Code Online (Sandbox Code Playgroud)

然后在项目文件夹中执行以下命令:

poetry shell
poetry add your_lib
poetry install
Run Code Online (Sandbox Code Playgroud)

诗歌env remove python将清理你的全局 python 环境,而诗歌配置 virtualenvs.in-project true将告诉诗歌只在你的项目文件夹中创建 .venv。