不使用 pip 列出 virtualenv 中安装的软件包(以及相应版本)

Arc*_*s B 5 python pip virtualenv

背景:从 Debian 8 更新到 9 后,Python 3.4 virtualenvs 停止工作,因为系统站点包全部被 Python 3.5 版本替换。这个答案建议删除旧的 virtualenv,创建一个新的,并使用pip install -r requirements.txt. 但是,我没有适用requirements.txt于所有的 virtualenv。我知道可以使用 创建此类文件pip freeze,但由于上述原因,pip无法使用1

\n\n

问题:我需要生成软件包列表以及它们各自安装在我\xc2\xa0 无法激活的virtualenv 中的列表。

\n\n

问题:有没有办法获得类似于输出的列表pip freeze有没有办法在不实际运行 pip 的情况下获得类似于 virtualenv 的

\n\n

注意:这个问题与 \xe2\x80\x9c返回脚本中使用的导入的 Python 模块列表不同?\xe2\x80\x9d 并且因为请求的答案不需要访问使用 virtualenv 的脚本,并且还应该返回 virtualenv 2中安装的软件包的版本。

\n\n
\n\n

1也就是说,运行pip(使用任何参数)会引发ImportError: No module named \'encodings\'.

\n\n

2完全披露:我问了一个类似的问题,但被错误地视为重复而关闭。

\n

Nil*_*ner 5

在没有可用 pip 的情况下获取已安装软件包的列表将非常困难。或者,您可以尝试从 virtualenv 目录中安装的文件名中理解site-packages

您可以site-packages通过运行来获取该目录

python -m site
Run Code Online (Sandbox Code Playgroud)

并寻找像这样的字符串

'/your/venv/lib/python3.4/site-packages'
Run Code Online (Sandbox Code Playgroud)

沿着那条路跑

ls -d /your/venv/lib/python3.4/site-packages/*.dist-info
Run Code Online (Sandbox Code Playgroud)

这将为您提供 virtualenv 中大多数已安装包目录的列表。

要清理此列表并创建一个requirements.txt有点类似于正确语法和数据的文件,您可以使用

ls -d /your/venv/lib/python3.4/site-packages/*.dist-info | xargs -I% basename % | sed 's/\.dist-info//; s/-/==/; s/_/-/' > requirements.txt
Run Code Online (Sandbox Code Playgroud)

不用说,您可能需要稍后清理其内容。