Python工具Poetry是如何知道一个项目的虚拟环境路径的?
How does the Python tool Poetry know the path of a project's virtual environment?
我的问题:Python工具诗怎么知道一个项目的虚拟环境的路径?
解释:当我在一个目录中运行poetry init
时,一个新的项目被创建。然后我 运行 poetry install
并创建了一个新的虚拟环境。但是,该虚拟环境的路径和哈希都没有像我预期的那样存储在 pyproject.toml
或 poetry.lock
中。当我 运行 poetry env info -p
?
时,Poetry 如何知道虚拟环境的位置
除了想知道发生了什么,我还需要知道这两个原因:
- 如何在不破坏 link 到其虚拟环境的情况下移动包含 Poetry 项目的目录?
- 如何知道 Poetry 的哪些虚拟环境未使用,因此可以删除?
可能的解决方案: 查看 Poetry 的源代码,在我看来文件 envs.toml
可能包含从文件系统目录到虚拟环境哈希的映射,但是在我的 Mac OS 11.1 上我找不到这样的文件。
我深入研究了源代码,现在我可能已经理解了:
- 相关代码在
poetry/utils/env.py
方法里面EnvManager.generate_env_name(...)
- 代码通过使用
pyproject.toml
中的项目名称并添加pyproject.toml
的父目录的哈希来推断环境的位置
因此:
- 没有简单的方法可以删除不再使用的环境
- 此外,如果我想移动诗歌项目的目录,我需要重命名虚拟环境的文件夹并正确替换散列。这应该可行,但最好再次 运行
poetry install
并创建一个新的虚拟环境
我的问题:Python工具诗怎么知道一个项目的虚拟环境的路径?
解释:当我在一个目录中运行poetry init
时,一个新的项目被创建。然后我 运行 poetry install
并创建了一个新的虚拟环境。但是,该虚拟环境的路径和哈希都没有像我预期的那样存储在 pyproject.toml
或 poetry.lock
中。当我 运行 poetry env info -p
?
除了想知道发生了什么,我还需要知道这两个原因:
- 如何在不破坏 link 到其虚拟环境的情况下移动包含 Poetry 项目的目录?
- 如何知道 Poetry 的哪些虚拟环境未使用,因此可以删除?
可能的解决方案: 查看 Poetry 的源代码,在我看来文件 envs.toml
可能包含从文件系统目录到虚拟环境哈希的映射,但是在我的 Mac OS 11.1 上我找不到这样的文件。
我深入研究了源代码,现在我可能已经理解了:
- 相关代码在
poetry/utils/env.py
方法里面EnvManager.generate_env_name(...)
- 代码通过使用
pyproject.toml
中的项目名称并添加pyproject.toml
的父目录的哈希来推断环境的位置
因此:
- 没有简单的方法可以删除不再使用的环境
- 此外,如果我想移动诗歌项目的目录,我需要重命名虚拟环境的文件夹并正确替换散列。这应该可行,但最好再次 运行
poetry install
并创建一个新的虚拟环境