find与easy_install / pip安装的所有软件包?

有没有办法find与easy_install或pip一起安装的所有Python PyPI包? 我的意思是,排除与分发工具安装的所有东西(在本例中为Debian上的apt-get)。

pip freeze将输出已安装的软件包及其版本的列表。 它还允许您将这些软件包写入一个文件,稍后可以用来设置一个新的环境。

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

从pip版本1.3开始,您现在可以使用pip list

它有一些有用的选项,包括显示过期的软件包的能力。 这里是文档: https : //pip.pypa.io/en/latest/reference/pip_list/

如果有人想知道你可以使用'点子秀'命令。

 pip show [options] <package> 

这将列出给定包的安装目录。

如果Debian的行为与最新的Ubuntu版本相似,那么pip install默认目标就很容易了:安装到/usr/local/lib/而不是/usr/libapt默认目标)。 检查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。 pacman -Qo是Arch的pac kage man ager如何检查文件所有权的。 No package是它没有软件包拥有文件时的返回的一部分: error: No package owns $FILENAME 。 棘手的解决方法:我查询__init__.py因为pacman -Qo有点无知,当涉及到目录:(

为了做到这一点的其他发行版,你必须找出在哪里安装的东西(只是sudo pip install东西),如何查询文件的所有权(Debian / Ubuntu的方法是dpkg -S )和什么是“没有包拥有那个path“return(Debian / Ubuntu是no path found matching pattern )。 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.get_installed_distributions()将给出已安装软件包的列表

 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 

从…开始:

 $ pip list 

列出所有软件包。 一旦你find你想要的包,使用:

 $ pip show <package-name> 

这会显示有关此软件包的详细信息,包括其文件夹。 如果您已经知道包名,则可以跳过第一部分

点击这里获取更多关于pip节目的信息,点击这里了解更多关于pip的信息。

例:

 $ 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 

下面是有点慢,但它提供了一个很好的格式化的pip意识到的软件包列表。 也就是说,并不是所有的这些都是通过点子来安装的,但是所有这些点子都应该可以通过点子进行升级。

 $ pip search . | egrep -B1 'INSTALLED|LATEST' 

慢的原因是它列出了整个pypi回购的内容。 我提交了一张build议pip list提供相似的function,但更有效的票 。

示例输出:(将search限制在一个子集中,而不是“。”)。

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

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

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

 pip3 list 

为我工作,我正在运行Python3.4。 简单地使用pip list返回了错误The program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip The program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip

下面是Fedora或其他rpm发行版的基础(基于@barraponto提示):

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

较新版本的pip能够通过pip list -lpip freeze -l来完成OP所要的操作。 在Debian(至less)手册页上没有说清楚,我只是在假设该特性必须存在的情况下才发现它 – 用pip list –help

最近有评论表明这个特性在文档或者现有的答案中都不是很明显(尽pipe有人暗示),所以我想我应该发布。 我本来希望这样做,但我没有声望点。

获取site-packages/ (和dist-packages/如果存在)中的所有文件/文件夹名称,并使用包pipe理器去除通过包安装的文件/文件夹名称。

即使不通过pip / easy_install,pip冻结也会列出所有已安装的软件包。 在CentOs / Redhatfind一个通过rpm安装的软件包。

加上@Paul Woolcock的回答,

 $ pip freeze > requirements.txt 

将在您可以运行的当前位置的活动环境中创build一个包含所有已安装软件包的需求文件

 $ pip install -r requirements.txt 

在另一个环境中安装需求。