【问题标题】:How can I list all the virtual environments created with venv?如何列出使用 venv 创建的所有虚拟环境?
【发布时间】:2020-08-13 13:03:53
【问题描述】:

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

我只能想到搜索pyvenv.cfg 文件来找到它们。比如:

from pathlib import Path

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

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

注意:问题是关于venv,具体来说,不是 Anaconda、virtualenv 等。

【问题讨论】:

  • 请试试这个命令 -> lsvirtualenv
  • @EddwinPaz 我专门询问venv 模块。
  • 在使用操作系统上执行 grep 我阅读了一些 venv 用法并创建了一个文件夹。另一个想法是进一步查看我不知道如何解决的所有正在运行的进程。调查它。
  • 有许多不同的软件包提供了将虚拟环境集中到一个文件夹中的工具。虽然它们不能帮助您搜索当前的虚拟环境,但它们提供了一种方便的方式来让未来的一切井井有条。
  • 您是否找到了一种用于搜索/列出 venv 的防弹方法?

标签: python python-venv


【解决方案1】:

在 Linux/macOS 上,这应该可以得到大部分内容

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

在您的主页下查找名为“site-packages”的目录,venv 将其 pip 安装的东西放在其中。 /dev/null 位减少了您无权查看的内容的闲聊。

或者您可以查看特定预期文件的细节。例如,activate 具有 nondestructive 作为内容。然后你需要寻找一个模式,而不是匹配 venv 而不是 anaconda 和其余的。

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

【讨论】:

  • 另一个选项是 find ~ -type l -name python 来查找所有指向 python 二进制文件的符号链接
  • @frost-nzcr4 也可以。有趣的是,如果你复制一个 venv 的文件,cp -r venv1/ venv2 然后source venv2/bin/activate 指向 venv1 的 Python。所以,它很接近,但不像复制带有.git 的目录那样独立。这是因为路径在安装时是硬编码的。
  • 对复制 venv 文件夹很感兴趣。除了寻找文件,我想不出其他任何事情。寻找python,你会得到所有形式的python解释器,寻找pyvenv.cfg,你只会得到用venv创建的虚拟环境。也许?
  • @JacquesGaudin pyenv.cfg 将是一个不错的选择。只需通过操作系统和文件系统来完成,而不是在 Python 脚本中。即使您需要编程访问,您也可以轻松地对find 进行子处理 - 例如,我已经在大文件上启动了简单的grep,而不是逐行执行 Python。这不是我通常会做的事情,但我真的在努力优化,让操作系统及其实用程序完成工作的速度要快得多。
  • @JacquesGaudin。你看过sd,一个基于 rust 的 sed 替换文件(不是 bash 字符串)吗?粗糙的边缘,但有很大的改进。 github.com/chmln/sd
【解决方案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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多