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

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


当前回答

使用virtualenv时,如果您只想升级添加到virtualenv的软件包,您可能需要执行以下操作:

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

其他回答

如果您安装了pip<22.3,则使用纯Bash/Z外壳一个衬垫实现:

for p in $(pip list -o --format freeze); do pip install -U ${p%%=*}; done

或者,以一种格式良好的方式:

for p in $(pip list -o --format freeze)
do
    pip install -U ${p%%=*}
done

在这之后,您将得到pip>=22.3,其中-o和--format冻结是互斥的,您不能再使用这一行。

您可以只打印过期的软件包:

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

要在默认python版本中升级所有pip默认包,只需在终端或命令提示符中运行底部python代码:

import subprocess
import re


pkg_list = subprocess.getoutput('pip freeze')

pkg_list = pkg_list.split('\n')


new_pkg = []
for i in pkg_list:
    re.findall(r"^(.*)==.*", str(i))
    new = re.findall(r"^(.*)==.*", str(i))[0]
    new_pkg.append(new)

for i in new_pkg:
    print(subprocess.getoutput('pip install '+str(i)+' --upgrade'))

使用virtualenv时,如果您只想升级添加到virtualenv的软件包,您可能需要执行以下操作:

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