pip - pip更新所有软件包

  显示原文与译文双语对照的内容

是否可以同时升级所有 python 软件包?

注意,在官方问题跟踪器上有一个特性请求

时间:

还没有内置标志,但是你可以使用


pip freeze --local | grep -v '^-e' | cut -d = -f 1 | xargs -n1 pip install -U

注意:这里有无限的潜在变化。 我试图保持这个答案简短而简单,但请在评论中建议变化 !

相关的编辑:

  • 添加了一个grep来跳过"-e"包定义,如 @jawache ( 是的,你可以用sed或者awk或者Perl或者- - 。) 建议的那样。
  • 较新版本的pip允许你列出过时的软件包,尽管不是"需求"格式: pip列表 --outdated 列表
  • -n1 添加到 xargs,如果更新一个软件包失败,则阻止停止所有内容( 感谢 @andsens) )

你可以使用以下 python 代码。 pip冻结不同,这不会打印警告和FIXME错误。


import pip
from subprocess import call

for dist in pip.get_installed_distributions():
 call("pip install --upgrade" + dist.project_name, shell=True)

要升级所有软件包,你可以使用 pip-tools:


$ pip install pip-tools
$ pip-review --interactive

我没有太仔细地看过,所以小心。

你可以只打印过期的软件包


pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'

Windows 版本后咨询优秀文档FOR 罗布·范德 Woude

for/F"delims===" %i in ('pip freeze -l') do pip install -U %i

https://github.com/cakebread/yolk 列表中:


$ pip install -U `yolk -U | awk '{print $1}' | uniq`

但是你需要先得到蛋黄:


$ sudo pip install -U yolk

下列one-liner可能会证明帮助。

pip list --outdated | sed 's/(.*//g' | xargs pip install -U

One-liner版本的@Ramana's 应答。


python -c 'import pip, subprocess; [subprocess.call("pip install -U" + d.project_name, shell=1) for d in pip.get_installed_distributions()]'

`

当使用 virtualenv 补充说,如果你只是想升级包 virtualenv, 你可能想要做的事:


pip install `pip freeze -l | cut --fields=1 -d = -` --upgrade

@Ramana's 对我来说是最好的,但我不得不添加一些捕捉:


import pip
for dist in pip.get_installed_distributions():
 if 'site-packages' in dist.location:
 try:
 pip.call_subprocess(['pip', 'install', '-U', dist.key])
 except Exception, exc:
 print exc

site-packages 检查排除了我的开发包,因为它们不在系统site-packages目录中。 try-except只是跳过从PyPI中删除的软件包。

@endolith: 我想要一个简单 pip.install(dist.key, upgrade=True) ,但是它看起来不像 命令行 ( 文档没有提到内部 API,并且pip开发人员没有使用文档文件) 之外的任何东西都要使用。

...