有没有一种方法可以找到所有使用easy_install或pip安装的Python PyPI包?我的意思是,排除使用发行版工具(在这种情况下是Debian上的apt-get)安装的所有内容。
有没有一种方法可以找到所有使用easy_install或pip安装的Python PyPI包?我的意思是,排除使用发行版工具(在这种情况下是Debian上的apt-get)安装的所有内容。
pip freeze
会输出已安装软件包及其版本的列表。它还允许您将这些软件包写入文件中,以后可以用来设置新环境。
https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
pip freeze
和 pip list
命令会列出所有内容,它们不会排除那些非通过 pip
安装的软件包。 - Eliadpip freeze
是可靠的,而 pip list
在与管道一起使用时会生成意外的错误。 - Dale C. Andersonpip list -l
或 pip list --local
是最好的答案,参见 https://dev59.com/2Ww15IYBdhLWcg3wcrdC#43012269 由 @MJB 提供。 - jmuc从pip的1.3版本开始,现在可以使用pip list
它有一些有用的选项,包括显示过时的软件包。以下是文档:https://pip.pypa.io/en/latest/reference/pip_list/
pip freeze
稍有不同。 - s gpip list --user
只会显示用户安装的软件包,而排除系统范围内的软件包。 - Jacob Hume--user
标志将使pip安装到用户安装目录。它不会列出使用sudo pip install packagexyz
安装的内容。 - Capi Etheriel如果有人想知道,你可以使用“pip show”命令。
pip show [options] <package>
这将列出给定软件包的安装目录。
开始:
$ pip list
列出所有软件包。一旦找到所需的软件包,请使用:
$ pip show <package-name>
这将向您显示有关此软件包的详细信息,包括其文件夹。如果您已经知道软件包名称,则可以跳过第一部分。
单击此处以获取有关pip show的更多信息,并单击此处以获取有关pip list的更多信息。
示例:
$ 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 install
默认目标方面的行为与最近的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安装的目录,可能会有所不同。pacman -Qo
是Arch的包管理器检查文件所有权的方式。当没有软件包拥有该文件时,No package
是它返回的一部分:error: No package owns $FILENAME
。巧妙的解决方法:我查询__init__.py
,因为pacman -Qo
对目录有点无知:(
为了在其他发行版上实现此操作,您需要找出pip
安装内容的位置(只需使用sudo pip install
安装某些内容),如何查询文件所有权(Debian / Ubuntu的方法是dpkg -S
),以及“没有软件包拥有该路径”的返回值(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'
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'
dpkg
将错误写入 stderr,所以我必须添加一个重定向 2>&1
。为了获得国际化输出,在 xargs dpkg -s
前面加上 LANG=
。而且 sed
也是一个不错的工具 ;),可以只保留路径中的软件包名称。所以最终我得到了这个命令:find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | LANG= xargs dpkg -S 2>&1 | grep 'no path found' | sed "s/.*\/\([^\/]*\)\/__init__\.py.*/\1/"
- David Bohopip list -l
或 pip freeze -l
(--list
)来满足 OP 的需求。pip list --help
下发现此功能存在的假设下找到了它。
最近的评论表明,无论是文档还是现有答案都不太明显(尽管有些暗示),因此我认为我应该发布这篇文章。我本来更愿意作为评论发表,但我没有足够的声望点数。pip freeze --local
。pip list --local
也是可用的...但请注意,OP的问题不是关于虚拟环境(--local
支持)的,而是关于区分发行版软件包和 sudo pip install
软件包的问题。 - Capi Etherielpip.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
在@Paul Woolcock的回答中,还有以下内容需要补充:
pip freeze > requirements.txt
运行该命令将会在当前目录下创建一个需求文件,其中包含了所有已安装的软件包以及它们在当前环境中的版本号。
pip install -r requirements.txt
将会安装在要求文件中指定的软件包。
pip
所知道的。也就是说,并不是所有这些包都是由pip“安装”的,但是所有这些包都应该能够通过pip进行升级。$ pip search . | egrep -B1 'INSTALLED|LATEST'
pip list
提供类似的功能,但更加高效。$ 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
。