Jür*_*ard 381 python pip easy-install pypi
有没有办法找到所有使用easy_install或pip安装的Python PyPI包?我的意思是,排除使用分发工具安装的所有内容(在本例中为apt-get on Debian).
小智 367
pip freeze将输出已安装的软件包及其版本的列表.它还允许您将这些包写入文件,以后可用于设置新环境.
https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
key*_*its 246
从版本1.3的pip开始,您现在可以使用 pip list
它有一些有用的选项,包括显示过时的包的能力.这是文档:https://pip.pypa.io/en/latest/reference/pip_list/
Dan*_*kes 135
如果有人想知道你可以使用'pip show'命令.
pip show [options] <package>
Run Code Online (Sandbox Code Playgroud)
这将列出给定包的安装目录.
Cap*_*iel 24
如果Debian的行为类似于最近关于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'
Run Code Online (Sandbox Code Playgroud)
这里的关键是/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在目录方面有点无知:(
为了对其他发行版进行操作,你必须找出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'
Run Code Online (Sandbox Code Playgroud)
Fedora用户可以试试(感谢@eddygeek):
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'
Run Code Online (Sandbox Code Playgroud)
ng1*_*g10 17
从...开始:
$ pip list
Run Code Online (Sandbox Code Playgroud)
列出所有包.找到所需的包后,使用:
$ pip show <package-name>
Run Code Online (Sandbox Code Playgroud)
这将显示有关此程序包的详细信息,包括其文件夹.如果您已经知道包名,则可以跳过第一部分
点击这里对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
Run Code Online (Sandbox Code Playgroud)
小智 8
较新版本的 pip 能够通过pip list -l或pip freeze -l( --list)执行 OP 想要的操作。
在 Debian(至少)上,手册页没有明确说明这一点,我只发现它 - 在该功能必须存在的假设下 - 带有pip list --help.
最近有评论表明此功能在文档或现有答案中并不明显(尽管有些人暗示了这一点),所以我认为我应该发布。我宁愿这样做作为评论,但我没有声誉点。
下面的内容有点慢,但它提供了一个格式良好的软件包列表pip.也就是说,并非所有这些都是"by"pip安装的,但所有这些都应该能够通过pip进行升级.
$ pip search . | egrep -B1 'INSTALLED|LATEST'
Run Code Online (Sandbox Code Playgroud)
它很慢的原因是它列出了整个pypi仓库的内容.我提交了一张建议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)
$
Run Code Online (Sandbox Code Playgroud)
添加到@Paul Woolcock 的回答中,
pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)
将在当前位置的活动环境中创建一个包含所有已安装包以及已安装版本号的需求文件。跑步
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
将安装需求文件中指定的包。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
407542 次 |
| 最近记录: |