是否可以使用pip一次性升级所有Python包?
注意:官方问题跟踪器上对此有一个功能请求。
是否可以使用pip一次性升级所有Python包?
注意:官方问题跟踪器上对此有一个功能请求。
当前回答
正如这里的另一个答案所述:
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
是一个可能的解决方案:这里的一些注释(包括我自己)在使用此命令时存在权限问题。对以下内容的一点改动为我解决了这些问题。
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
注意添加的sudo-H允许命令以root权限运行。
其他回答
没有必要这么麻烦或安装一些软件包。
在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。冻结是命令管道中更好的选项。尽可能多地保持命令简单和可用。
我试过Ramana的代码,我发现在Ubuntu上,每个命令都必须写sudo。这是我在Ubuntu 13.10(Saucy Salamander)上运行良好的脚本:
#!/usr/bin/env python
import pip
from subprocess import call
for dist in pip.get_installed_distributions():
call("sudo pip install --upgrade " + dist.project_name, shell=True)
JSON+jq答案:
pip list -o --format json | jq '.[] | .name' | xargs pip install -U
在查阅Rob van der Woude的for优秀文档后,Windows版本:
for /F "delims===" %i in ('pip freeze') do pip install --upgrade %i
Use:
pip install -r <(pip freeze) --upgrade