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

How does the Python tool Poetry know the path of a project's virtual environment?

我的问题:Python工具诗怎么知道一个项目的虚拟环境的路径?

解释:当我在一个目录中运行poetry init时,一个新的项目被创建。然后我 运行 poetry install 并创建了一个新的虚拟环境。但是,该虚拟环境的路径和哈希都没有像我预期的那样存储在 pyproject.tomlpoetry.lock 中。当我 运行 poetry env info -p?

时,Poetry 如何知道虚拟环境的位置

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

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

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

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

因此:

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