如何使用pip升级所有Python包

12 浏览
0 Comments

如何使用pip升级所有Python包

想改善这篇文章吗? 提供详细的回答,包括引用和解释为什么你的答案是正确的。没有足够细节的答案可能会被编辑或删除。

是否可能使用pip一次性升级所有的Python包?

注意:官方问题跟踪器上有一个功能请求

admin 更改状态以发布 2023年5月21日
0
0 Comments

你可以使用以下Python代码。与pip freeze不同,它不会打印警告和FIXME错误。
对于pip < 10.0.1

import pip
from subprocess import call
packages = [dist.project_name for dist in pip.get_installed_distributions()]
call("pip install --upgrade " + ' '.join(packages), shell=True)

对于pip >= 10.0.1

import pkg_resources
from subprocess import call
packages = [dist.project_name for dist in pkg_resources.working_set]
call("pip install --upgrade " + ' '.join(packages), shell=True)

0
0 Comments

目前还没有内置的标志。从 pip 版本 22.3 开始,--outdated--format=freeze 已经成为互斥的。使用 Python 来解析 JSON 输出:

pip --disable-pip-version-check list --outdated --format=json | python -c "import json, sys; print('
'.join([x['name'] for x in json.load(sys.stdin)]))"

如果您使用的是 pip<22.3,可以使用以下命令:

pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

对于旧版本的 pip

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


  • grep 用于跳过可编辑("-e")的包定义,由 @jawache 建议。(是的,你可以用 sed 或 awk 或 perl 等替换 grep + cut)。

  • xargs 的 -n1 标志可防止如果更新一个软件包失败,就会停止所有更新操作(感谢 @andsens)。

  • Note: 这有无限的可能性。我试着把这个答案保持简单明了,但请在评论中提出变体!

0