有没有办法找到使用easy_install或pip安装的所有Python PyPI包?我的意思是,不包括发行版工具(在Debian上的apt-get)安装的所有东西。


当前回答

请注意,如果您的计算机上安装了多个版本的Python,则每个版本可能都有几个pip的相关版本。

根据您的关联,您可能需要非常谨慎地使用pip命令:

pip3 list 

对我有用,我在那里运行Python3.4。简单地使用pip列表返回错误“pip”程序当前未安装。您可以通过输入:sudo apt-get install python-pip来安装它。

其他回答

如果Debian在pip安装默认目标方面表现得像最近的Ubuntu版本,那么它非常简单:它安装到/usr/local/lib/而不是/usr/lib (apt默认目标)。检查https://askubuntu.com/questions/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747 # 259747

我是一个ArchLinux用户,当我尝试使用pip时,我遇到了同样的问题。以下是我在《Arch》中的解决方法。

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs pacman -Qo | grep 'No package'

这里的关键是/usr/lib/python2.7/site-packages,这是pip安装到的目录,YMMV。qo是Arch的package管理器检查文件所有权的方法。当没有包拥有该文件时,没有包是它给出的返回的一部分:棘手的解决方法:我正在查询__init__.py,因为pacman -Qo在涉及到目录时有点无知:(

为了在其他发行版上做到这一点,你必须找出pip在哪里安装东西(只需sudo pip install一些东西),如何查询文件的所有权(Debian/Ubuntu的方法是dpkg -S),以及“没有包拥有该路径”的返回是什么(Debian/Ubuntu是没有路径找到匹配模式)。Debian/Ubuntu用户,注意:如果你给dpkg -S一个符号链接,它会失败。首先使用realpath解决它。是这样的:

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):

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'

新版本的pip能够通过pip list -l或pip freeze -l(——list)执行OP想要的操作。 在Debian上(至少),手册页并没有说明这一点,我只是在假定该特性必须存在的情况下,通过pip list—help才发现了它。

最近有评论认为这个功能在文档或现有的答案中都不明显(尽管有些人暗示了),所以我认为我应该发布。我更愿意这样做作为一个评论,但我没有声誉点。

请注意,如果您的计算机上安装了多个版本的Python,则每个版本可能都有几个pip的相关版本。

根据您的关联,您可能需要非常谨慎地使用pip命令:

pip3 list 

对我有用,我在那里运行Python3.4。简单地使用pip列表返回错误“pip”程序当前未安装。您可以通过输入:sudo apt-get install python-pip来安装它。

PIP冻结将输出已安装包及其版本的列表。它还允许您将这些包写入文件,以便稍后用于设置新环境。

https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze

下面是fedora或其他rpm发行版的一行代码(基于@barraponto tips):

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'

将此附加到上一个命令以获得更清晰的输出:

 | sed -r 's:.*/(\w+)/__.*:\1:'