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

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


当前回答

这似乎更简洁。

pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U

说明:

pip-list——过时的代码行如下

urllib3 (1.7.1) - Latest: 1.15.1 [wheel]
wheel (0.24.0) - Latest: 0.29.0 [wheel]

在cut-d“”-f1中,-d“”将“空格”设置为分隔符,-f1表示获取第一列。

因此,上述行变为:

urllib3
wheel

然后将它们传递给xargs以运行命令pipinstall-U,每一行都作为附加参数

-n1将传递给每个命令pip install-U的参数数限制为1

其他回答

这是Python 3的PowerShell解决方案:

pip3 list --outdated --format=legacy | ForEach { pip3 install -U $_.split(" ")[0] }

对于Python 2:

pip2 list --outdated --format=legacy | ForEach { pip2 install -U $_.split(" ")[0] }

这将逐个升级软件包。因此

pip3 check
pip2 check

之后应该确保没有中断依赖关系。

这是我对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

这似乎更简洁。

pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U

说明:

pip-list——过时的代码行如下

urllib3 (1.7.1) - Latest: 1.15.1 [wheel]
wheel (0.24.0) - Latest: 0.29.0 [wheel]

在cut-d“”-f1中,-d“”将“空格”设置为分隔符,-f1表示获取第一列。

因此,上述行变为:

urllib3
wheel

然后将它们传递给xargs以运行命令pipinstall-U,每一行都作为附加参数

-n1将传递给每个命令pip install-U的参数数限制为1

在Windows或Linux上更新Python包

1-将已安装软件包的列表输出到需求文件(requirements.txt)中:

pip freeze > requirements.txt

2-编辑requirements.txt,并将所有“==”替换为“>=”。在编辑器中使用“全部替换”命令。

3-升级所有过时的软件包

pip install -r requirements.txt --upgrade

资料来源:https://www.activestate.com/resources/quick-reads/how-to-update-all-python-packages/

Windows上最短、最简单的。

pip freeze > requirements.txt && pip install --upgrade -r requirements.txt && rm requirements.txt