如何列出使用venv创建的所有虚拟环境?

时间:2020-03-26 18:02:25

标签: python python-venv

有人刚刚问我如何列出用venv创建的所有虚拟环境。

我只能考虑搜索pyvenv.cfg个文件以找到它们。像这样:

from pathlib import Path

venv_list = [str(p.parent) for p in Path.home().rglob('pyvenv.cfg')]

这可能包括一些误报。是否有更好的方法列出用venv创建的所有虚拟环境?

注意:问题是关于venv的,特别是 Anaconda,virtualenv等

2 个答案:

答案 0 :(得分:4)

在Linux / macOS上,应该可以获取大部分信息

find ~ -d -name "site-packages" 2>/dev/null

寻找家中名为“ site-packages”的目录,在该目录中venv将其点子安装的内容放入其中。 / dev / null位可减少您无权查看的内容的闲聊。

或者您可以查看特定预期文件的详细信息。例如,activate具有nondestructive作为内容。然后,您需要寻找比venv匹配的模式,而不是与蟒蛇匹配的模式。

find ~ -type f -name "activate" -exec egrep -l nondestructive /dev/null {} \; 2>/dev/null

答案 1 :(得分:2)

标准库 venv 不跟踪任何创建的虚拟环境。因此,列出所有文件夹的唯一方法是在您的硬盘驱动器中搜索符合特定条件的文件夹。

PEP 405 很好地列出了文件夹中应包含的内容,以便它成为虚拟环境。这 blog post 也很好地解释了虚拟环境内部的一部分。虚拟环境的定义是

<块引用>

最简单形式的 Python 虚拟环境包括 只不过是 Python 二进制文件的副本或符号链接 附带一个 pyvenv.cfg 文件和一个 site-packages 目录。 (PEP 405)

总而言之,您必须在硬盘驱动器中搜索以下文件夹:

Linux/macOS

  • pyvenv.cfghome 键*
  • bin/python3bin/python
  • lib/<python-version>/site-packages/,其中 <python-version> 是例如 python3.3
  • 可选:如果使用 venv 创建,还有 bin/activate (source)。即使缺少文件夹,文件夹也被视为虚拟环境。 (PEP 405)

视窗

  • pyvenv.cfghome 键*
  • Script/python.exe
  • lib/<python-version>/site-packages/,其中 <python-version> 是例如 python3.3
  • 可选:如果使用 venv 创建,还有 Scripts/activate.batScripts/Activate.ps1 (source)。即使缺少这些文件夹,文件夹也被视为虚拟环境。 (PEP 405)

* pyvenv.cfg

pyvenv.cfg 实际上可以位于 python 可执行文件之上的同一文件夹或一个子文件夹中。属于虚拟环境的 pyvenv.cfg 必须有 home = <home> 行,其中 <home> 是包含用于创建虚拟环境的 Python 可执行文件的目录。 (PEP 405)。