Find all packages installed with easy_install/pip?
有没有办法找到所有用easy-install或pip安装的python pypi包?我的意思是,不包括已经安装/已经安装了分发工具的所有内容(在本例中,倾向于使用Debian)。
https://pip.pypa.io/en/stable/reference/pip_freeze/pip freeze
从PIP的1.3版开始,您现在可以使用
它有一些有用的选项,包括显示过时包的功能。文档如下:https://pip.pypa.io/en/latest/reference/pip_list/
如果有人想知道你可以使用"pip show"命令。
1 | pip show [options] <package> |
这将列出给定包的安装目录。
如果debian的行为类似于最近的Ubuntu版本中的
我是一个archlinux用户,在使用pip进行试验时,我遇到了同样的问题。以下是我如何在拱门中解决的。
1 | find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs pacman -Qo | grep 'No package' |
这里的键是
为了在其他发行版上实现这一点,您必须了解
1 | find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | xargs dpkg -S 2>&1 | grep 'no path found' |
Fedora用户可以尝试(谢谢@eddygeek):
1 | find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package' |
开始:
1 | $ pip list |
列出所有包。找到所需的包后,请使用:
1 | $ pip show <package-name> |
这将显示有关此包的详细信息,包括其文件夹。如果已经知道包名,可以跳过第一部分
单击此处以获取有关PIP显示的更多信息,单击此处以获取有关PIP列表的更多信息。
例子:
1 2 3 4 5 6 7 8 9 10 | $ pip show jupyter Name: jupyter Version: 1.0.0 Summary: Jupyter metapackage. Install all the Jupyter components in one go. Home-page: http://jupyter.org Author: Jupyter Development Team Author-email: jupyter@googlegroups.org License: BSD Location: /usr/local/lib/python2.7/site-packages Requires: ipywidgets, nbconvert, notebook, jupyter-console, qtconsole, ipykernel |
下面有点慢,但它给出了
1 | $ pip search . | egrep -B1 'INSTALLED|LATEST' |
速度慢的原因是它列出了整个pypi repo的内容。我提交了一张通知单,建议
示例输出:(将搜索限制为一个子集,而不是针对所有子集的".")。
1 2 3 4 5 6 7 8 9 | $ pip search selenium | egrep -B1 'INSTALLED|LATEST' selenium - Python bindings for Selenium INSTALLED: 2.24.0 LATEST: 2.25.0 -- robotframework-selenium2library - Web testing library for Robot Framework INSTALLED: 1.0.1 (latest) $ |
1 2 3 4 5 6 | import pip from os.path import join for package in pip.get_installed_distributions(): print(package.location) # you can exclude packages that's in /usr/XXX print(join(package.location, package._get_metadata("top_level.txt"))) # root directory of this package |
请注意,如果您的计算机上安装了多个版本的python,则可能会有几个版本的pip与每个版本相关联。
根据您的关联,您可能需要非常谨慎地使用PIP命令:
1 | pip3 list |
为我工作,我在那里经营着Python3.4。仅使用
加上@paul woolcock的答案,
1 | $ pip freeze > requirements.txt |
将在当前可以运行的位置创建一个包含活动环境中所有已安装包的需求文件
1 | $ pip install -r requirements.txt |
在另一个环境中安装需求。
新版本的PIP能够通过pip list-l或pip freeze-l。在Debian(至少)上,手册页并没有说明这一点,我只是在假设该特性必须存在的前提下发现了它——使用pip list——帮助。
最近有评论认为这个特性在文档或现有答案中都不明显(尽管有人暗示过),所以我认为我应该发布。我宁愿这样做作为一个评论,但我没有信誉点。
下面是Fedora或其他RPM发行版的一个内衬(基于@barraponto tips):
1 | find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package' |
将此附加到上一个命令以获取更清晰的输出:
1 | | sed -r 's:.*/(\w+)/__.*:\1:' |
pip freeze列出所有已安装的软件包,即使不是通过pip/easy_安装。在CentOS/RedHat上找到通过RPM安装的软件包。
对于那些没有安装PIP的用户,我在GitHub上找到了这个快速脚本(与Python2.7.13一起使用):
1 2 3 4 | import pkg_resources distros = pkg_resources.AvailableDistributions() for key in distros: print distros[key] |
获取
正如@almenon所指出的,这不再有效,而且它不是在代码中获取包信息的支持方式。以下情况引发异常:
1 2 3 | import pip installed_packages = dict([(package.project_name, package.version) for package in pip.get_installed_distributions()]) |
为此,您可以导入
1 2 3 | import pkg_resources installed_packages = dict([(package.project_name, package.version) for package in pkg_resources.working_set]) |
我在江户十一〔七〕号
至少对于Ubuntu(可能还有其他人)来说是这样的(灵感来源于这篇文章的前一篇文章):
1 2 | printf"Installed with pip:"; pip list 2>/dev/null | gawk '{print $1;}' | while read; do pip show"${REPLY}" 2>/dev/null | grep 'Location: /usr/local/lib/python2.7/dist-packages' >/dev/null; if (( $? == 0 )); then printf" ${REPLY}"; fi; done; echo |
如果使用anaconda python发行版,可以使用
1 2 3 4 5 6 7 8 9 | user@pc:~ $ conda list # packages in environment at /anaconda3: # # Name Version Build Channel _ipyw_jlab_nb_ext_conf 0.1.0 py36h2fc01ae_0 alabaster 0.7.10 py36h174008c_0 amqp 2.2.2 <pip> anaconda 5.1.0 py36_2 anaconda-client 1.6.9 py36_0 |
获取
1 2 3 4 5 6 7 | user@pc:~ $ conda list | grep \<pip amqp 2.2.2 <pip> astroid 1.6.2 <pip> billiard 3.5.0.3 <pip> blinker 1.4 <pip> ez-setup 0.9 <pip> feedgenerator 1.9 <pip> |
当然,您可能只想选择第一列,您可以使用它(如果需要,不包括
1 2 3 4 5 6 7 | user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 !="pip") print $1}' amqp astroid billiard blinker ez-setup feedgenerator |
最后,您可以获取这些值,并使用以下命令PIP卸载所有这些值:
1 | user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 !="pip") print $1}' | xargs pip uninstall -y |
注意使用