如何使用pip升级所有Python包
如何使用pip升级所有Python包
想改善这篇文章吗? 提供详细的回答,包括引用和解释为什么你的答案是正确的。没有足够细节的答案可能会被编辑或删除。
是否可能使用pip
一次性升级所有的Python包?
注意:官方问题跟踪器上有一个功能请求。
admin 更改状态以发布 2023年5月21日
你可以使用以下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)
目前还没有内置的标志。从 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: 这有无限的可能性。我试着把这个答案保持简单明了,但请在评论中提出变体!