Python工具Poetry如何知道项目虚拟环境的路径?

tyr*_*rex 4 python-poetry

我的问题: Python 工具 Poetry 如何知道一个项目的虚拟环境的路径?

说明:当我poetry init在目录中运行时,会创建一个新项目。然后我运行poetry install并创建一个新的虚拟环境。但是,该虚拟环境的路径和散列都没有存储在我预期的中pyproject.tomlpoetry.lock如我预期的那样。当我运行时,Poetry 如何知道虚拟环境的位置poetry env info -p

除了想知道发生了什么之外,我还需要知道这一点,原因有两个:

  • 如何在不中断指向其虚拟环境的链接的情况下移动包含 Poetry 项目的目录?
  • 如何知道 Poetry 的哪些虚拟环境未使用并可以删除?

可能的解决方案:查看 Poetry 的源代码,在我看来,一个文件envs.toml可能包含从文件系统目录到虚拟环境哈希的映射,但在我的 Mac OS 11.1 上我找不到这样的文件。

tyr*_*rex 6

我深入研究了源代码,现在我可能已经理解了:

  • 相关代码在poetry/utils/env.py方法里面EnvManager.generate_env_name(...)
  • 该代码通过使用项目名称pyproject.toml并添加其父目录的哈希来推断环境的位置pyproject.toml

作为结果:

  • 没有简单的方法可以删除不再使用的环境
  • 另外,如果我想移动诗歌项目的目录,我需要重命名虚拟环境的文件夹并正确替换散列。这应该可行,但最好poetry install再次运行并创建一个新的虚拟环境

  • 您无法重命名(移动)虚拟环境,这不起作用。您还需要在某些文件中进行一些搜索/替换。-- 事实上,在移动或删除相应的“pyproject.toml”之后,某些虚拟环境被遗弃很长时间,这可能是一个问题。值得庆幸的是,只需一个命令即可非常轻松地从头开始重新创建虚拟环境。这就是为什么删除大量_poetry_虚拟环境是非常安全的,即使不确定它们是否仍然“_alive_”。 (5认同)