python - 在不使用 pip 的情况下列出安装在 virtualenv 中的包(具有相应版本)

标签 python pip virtualenv

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

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

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

注意:这个问题不同于“Return a list of imported Python modules used in a script? ”,因为请求的答案不需要访问使用 virtualenv 的脚本,并且还应该返回安装在 virtualenv2 中的包的版本。


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

2 全面披露:我问了一个 similar question被错误地关闭为重复。

最佳答案

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

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

python -m site

并寻找类似的字符串

'/your/venv/lib/python3.4/site-packages'

走那条路跑

ls -d /your/venv/lib/python3.4/site-packages/*.dist-info

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

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

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

不用说,之后您可能需要稍微清理一下它的内容。

关于python - 在不使用 pip 的情况下列出安装在 virtualenv 中的包(具有相应版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51709681/

相关文章:

python - 如何在python中使用lxml获取img的src?

python - 在 Ubuntu 上安装 pylibmc

python - 如何在同一虚拟环境中将私有(private)使用的包与与项目相关的包分开?

python - 管理 Python 版本和库需要什么?

python - 在 3D 图上绘制两个 2D 图

python如何读取一行直到EOF

python - 如果段长度高于特定值,如何递归离散化段

python - Django,python3,安装时我得到 : "Parent module ' setuptools' not loaded"

python - pip + Nexus + virtualenv = HTTP 读取超时错误

python virtualenv模块导入错误