是否可以使用pip一次性升级所有Python包?
注意:官方问题跟踪器上对此有一个功能请求。
是否可以使用pip一次性升级所有Python包?
注意:官方问题跟踪器上对此有一个功能请求。
当前回答
要升级所有本地软件包,您可以安装pip review:
$ pip install pip-review
之后,您可以交互升级软件包:
$ pip-review --local --interactive
或自动:
$ pip-review --local --auto
pipreview是pip工具的一个分支。参见@knedlsepp提到的pip工具问题。pipreview包有效,但piptools包不再有效。pipreview正在寻找新的维护者。
pip review从0.5版开始在Windows上运行。
其他回答
使用pipupgrade。。。最新版本2019
$ pip install pipupgrade
$ pipupgrade --verbose --latest --yes
pipupgrade帮助您从requirements.txt文件升级系统、本地或软件包!它还选择性地升级不破坏更改的包。
pipupgrade还确保升级多个Python环境中的包。它与Python2.7+、Python23.4+和pip9+、pip10+、pip18+、pip19+兼容。
注:我是该工具的作者。
Use:
import pip
pkgs = [p.key for p in pip.get_installed_distributions()]
for pkg in pkgs:
pip.main(['install', '--upgrade', pkg])
甚至:
import pip
commands = ['install', '--upgrade']
pkgs = commands.extend([p.key for p in pip.get_installed_distributions()])
pip.main(commands)
它的工作速度很快,因为它不会不断发射炮弹。
JSON+jq答案:
pip list -o --format json | jq '.[] | .name' | xargs pip install -U
这是我对rbp答案的变体,它绕过了“可编辑”和开发发行版。它有两个缺点:不必要地重新下载和重新安装;并且一个包上的错误将阻止之后每个包的升级。
pip freeze |sed -ne 's/==.*//p' |xargs pip install -U --
相关错误报告,从Bitbucket迁移后有点脱节:
https://github.com/pypa/pip/issues/49https://github.com/pypa/pip/issues/59
没有必要这么麻烦或安装一些软件包。
在Linux shell上更新pip包:
pip list --outdated --format=freeze | awk -F"==" '{print $1}' | xargs -i pip install -U {}
在Windows powershell上更新pip包:
pip list --outdated --format=freeze | ForEach { pip install -U $_.split("==")[0] }
一些要点:
将pip作为python版本替换为pip3或pip2。pip-list——过时,用于检查过时的pip包。--我的pip版本22.0.3的格式只有3种类型:列(默认)、冻结或json。冻结是命令管道中更好的选项。尽可能多地保持命令简单和可用。