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/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。 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 -l或pip 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
在另一个环境中安装需求。