【问题标题】:Poetry not installing the packages in the venv诗歌没有在 venv 中安装包
【发布时间】:2022-08-06 21:38:34
【问题描述】:

我是诗歌新手,遇到一个问题,我无法在网上找到很多信息。我的诗歌应该创建一个 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

当我输入 poetry shell 然后 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\'>

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

然后我仔细检查了.venv/lib/python3.9/site-packages里面的内容,里面基本上什么都没有。我确实找到了一些以包名结尾的存储库,并以.dist-info 结尾。我不确定那是关于什么的。

我还在poetry shell 中尝试了which python,这就是我得到的:

(.venv) XXX@XXX:~/XXX$ which python
/home/.../.venv/bin/python

似乎诗歌确实在 venv 中使用了 python 3.9

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

    标签: python python-3.x virtualenv python-poetry


    【解决方案1】:

    /home/X/.local/lib/python3.9/site-packages

    这不是“实际的 python3.9 站点包”(即系统 python3.9 站点包),而是your PEP 370 per-user site-packages directory。您是否有可能在没有启用 Poetry 或 vanilla 虚拟环境的情况下安装了这些软件包(或其中一些)? Poetry 很可能决定不在项目 venv 中安装依赖项,这些依赖项已经在本地站点包中可用。

    您可以在没有激活 virtualenv 的情况下使用 pip list --user 来查看该本地目录中安装了哪些软件包,并使用例如pip uninstall 卸载它们。

    如果您将该目录移开(例如,将 python3.9 重命名为 python3.9-temporarily-out-of-the-way)并要求 Poetry 安装软件包,您还可以看到会发生什么。

    【讨论】:

    • 我将lib/python3.9 重命名为另一个名称,然后再次运行poetry install。结果是一样的,我得到了完全相同的结果。但是当我检查/.local/lib/时,我发现已经创建了一个新的存储库python3.9
    • 所以依赖项(重新)安装在~/.local/lib/python3.9 而不是venv?
    • 是的。 venv/lib 中仍然没有任何内容
    • 嗯——也许再次摆脱.local 站点包并尝试使用poetry -vvv install 以获得调试级别的详细信息?输出应该有一些线索......
    【解决方案2】:

    你可以试试:

    poetry env remove python
    poetry config virtualenvs.in-project true
    

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

    poetry shell
    poetry add your_lib
    poetry install
    

    诗歌环境删除python将清理您的全局 python 环境,并且诗歌配置 virtualenvs.in-project true会告诉诗歌只在您的项目文件夹中创建 .venv 。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-17
      • 2021-06-13
      • 2013-08-28
      • 2022-06-21
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 2021-08-27
      相关资源
      最近更新 更多