python-列出安装在virtualenv中的软件包(具有相应版本),而无需使用pip

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

问题:我需要生成无法激活的虚拟环境中安装的软件包及其各自的列表.

问题:是否有一种方法可以在不实际运行pip的情况下获得类似于virtualenv的pip冻结输出的列表?

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

1即,运行pip(带有任何参数)会引发ImportError:没有名为“ encodings”的模块.

2完全披露:我问一个similar question,它被错误地作为重复关闭.

解决方法:

在没有有效的提示的情况下获取已安装软件包的列表将非常困难.另外,您可以尝试从安装在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中大多数已安装软件包目录的列表.

要清理此列表并创建一个看上去与正确的语法和数据有些相似的requirements.txt文件,可以使用

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

不用说,您之后可能需要清理其中的内容.

上一篇:2018-2-13-win10-uwp-切换主题


下一篇:在虚拟环境中升级Python