是否可以通过pip一次升级所有Python软件包?

注意 :官方问题追踪器上对此功能有要求 。


#1楼

从https://github.com/cakebread/yolk :

$ pip install -U `yolk -U | awk '{print $1}' | uniq`

但是,您需要先获得蛋黄:

$ sudo pip install -U yolk

#2楼

@Ramana的答案对我来说最有效,但是我不得不添加一些注意事项:

import pip
for dist in pip.get_installed_distributions():if 'site-packages' in dist.location:try:pip.call_subprocess(['pip', 'install', '-U', dist.key])except Exception, exc:print exc

site-packages检查不包括我的开发软件包,因为它们不在系统站点软件包目录中。 try-except仅跳过已从PyPI中删除的软件包。

@endolith:我也希望有一个简单的pip.install(dist.key, upgrade=True) ,但它看起来不像pip可以被命令行以外的任何方式使用(文档中没有提到内部API,并且pip开发人员未使用文档字符串)。


#3楼

升级所有本地软件包; 您可以使用pip-review

$ pip install pip-review
$ pip-review --local --interactive

pip-reviewpip-tools一个分支。 请参阅@knedlsepp提到的pip-tools问题 。 pip-review软件包有效,但pip-tools软件包不再有效。

从0.5版开始, pip-review在Windows上运行。


#4楼

@Ramana的答案的一线版。

python -c 'import pip, subprocess; [subprocess.call("pip install -U " + d.project_name, shell=1) for d in pip.get_installed_distributions()]'

`


#5楼

您可以尝试以下方法:

for i in ` pip list|awk -F ' ' '{print $1}'`;do pip install --upgrade $i;done

#6楼

通过拉动请求发送给小学生 。 同时使用此pip库解决方案,我写道:

from pip import get_installed_distributions
from pip.commands import installinstall_cmd = install.InstallCommand()options, args = install_cmd.parse_args([package.project_namefor package inget_installed_distributions()])options.upgrade = True
install_cmd.run(options, args)  # Chuck this in a try/except and print as wanted

#7楼

以下一线可能会有所帮助:

pip list --format freeze --outdated | sed 's/(.*//g' | xargs -n1 pip install -U

如果出现错误, xargs -n1继续运行。

如果您需要对遗漏的内容和引起错误的内容进行更多的“细粒度”控制,则不应添加-n1标志并显式定义要忽略的错误,方法是为每个单独的错误“插入”以下行:

| sed 's/^<First characters of the error>.*//'

这是一个工作示例:

pip list --format freeze --outdated | sed 's/(.*//g' | sed 's/^<First characters of the first error>.*//' | sed 's/^<First characters of the second error>.*//' | xargs pip install -U

#8楼

这不是更有效吗?

pip3 list -o | grep -v -i warning | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U
  1. pip list -o列出过时的软件包;
  2. grep -v -i warningwarning进行反向匹配,以避免更新时出错
  3. cut -f1 -d1' '返回第一个单词-过时软件包的名称;
  4. tr "\\n|\\r" " "cut的多行结果转换为单行,以空格分隔的列表;
  5. awk '{if(NR>=3)print}'跳过标题行
  6. cut -d' ' -f1获取第一列
  7. xargs -n1 pip install -U从左管道中获取1个参数,并将其传递给命令以升级软件包列表。

#9楼

在我看来,这个选项更直接易读:

pip install -U `pip list --outdated | tail -n +3 | awk '{print $1}'`

解释是pip list --outdated以这种格式输出所有过时软件包的列表:

Package   Version Latest Type
--------- ------- ------ -----
fonttools 3.31.0  3.32.0 wheel
urllib3   1.24    1.24.1 wheel
requests  2.20.0  2.20.1 wheel

tail -n +3跳过前两行,而awk '{print $1}'选择每行的第一个单词。


#10楼

这似乎对我有用...

pip install -U $(pip list --outdated|awk '{printf $1" "}')

之后,我在printf加上了一个空格,以正确分隔软件包名称。


#11楼

适用于Windows。 也应该对别人有好处。 ($是您在命令提示符下所在的目录,例如C:/ Users / Username>)

$ pip freeze > requirements.txt

打开文本文件,将==替换为>= ,然后执行

$ pip install -r requirements.txt --upgrade

如果您对某个软件包停止升级有问题(有时为numpy),只需转到目录($),注释掉名称(在其前面添加#),然后再次运行升级。 您稍后可以取消对该部分的注释。 这对于复制python全局环境也非常有用。


其他方式:

我也喜欢pip-review方法:

py2
$ pip install pip-review$ pip-review --local --interactivepy3
$ pip3 install pip-review$ py -3 -m pip_review --local --interactive

您可以选择“ a”来升级所有软件包。 如果一次升级失败,请再次运行它,然后继续进行下一次升级。


#12楼

还没有内置标志,但是您可以使用

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将跳过@jawache建议的可编辑(“ -e”)软件包定义。 (是的,您可以将grep + cut替换为sedawkperl或...)。

如果更新一个软件包失败(感谢@andsens ),则xargs-n1标志可阻止停止所有操作。


#13楼

相当惊人的蛋黄使这一过程变得容易。

pip install yolk3k # don't install `yolk`, see https://github.com/cakebread/yolk/issues/35
yolk --upgrade

有关蛋黄的更多信息: https : //pypi.python.org/pypi/yolk/0.4.3

它可以做很多您可能会发现有用的事情。


#14楼

这似乎更简洁。

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

说明:

pip list --outdated获取这样的行

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

cut -d ' ' -f1-d ' '将“ space”设置为定界符, -f1表示获取第一列。

因此,以上几行变为:

urllib3
wheel

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

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


#15楼

Windows Powershell解决方案

pip freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}

#16楼

我的剧本:

pip list --outdated --format=legacy | cut -d ' ' -f1 | xargs -n1 pip install --upgrade

#17楼

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)

可以快速运行,因为它不会不断启动外壳。 我希望找到时间使用过时的列表实际完成此操作,以进一步加快速度。


#18楼

更强大的解决方案

对于pip3,请使用以下命令:

pip3 freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip3 install -U \1/p' |sh

对于点子,只需将3删除即可:

pip freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip install -U \1/p' |sh

OSX奇数

截至2017年7月,OSX随附了非常老版本的sed(已有十二年历史)。 要获取扩展的正则表达式,请在上述解决方案中使用-E而不是-r。

用流行的解决方案解决问题

该解决方案经过精心设计和测试1 ,而即使是最流行的解决方案也存在问题。

  • 由于更改pip命令行功能而导致的可移植性问题
  • 由于常见的pip或pip3子进程失败而导致xargs崩溃
  • 来自原始xargs输出的拥挤日志
  • 依靠Python到OS的网桥,同时可能对其进行升级3

上面的命令结合使用sed和sh来使用最简单,最可移植的pip语法来完全解决这些问题。 sed操作的详细信息可以通过注释的版本2进行审查。


细节

[1]经过测试,并在Linux 4.8.16-200.fc24.x86_64群集中正常使用,并在其他五种Linux / Unix版本上进行了测试。 它还可以在Windows 10上安装的Cygwin64上运行。需要在iOS上进行测试。

[2]为了更清楚地了解命令的结构,这与上面带有注释的pip3命令完全等效:

# match lines from pip's local package list output
# that meet the following three criteria and pass the
# package name to the replacement string in group 1.
# (a) Do not start with invalid characters
# (b) Follow the rule of no white space in the package names
# (c) Immediately follow the package name with an equal sign
sed="s/^([^=# \t\\][^ \t=]*)=.*"# separate the output of package upgrades with a blank line
sed="$sed/echo"# indicate what package is being processed
sed="$sed; echo Processing \1 ..."# perform the upgrade using just the valid package name
sed="$sed; pip3 install -U \1"# output the commands
sed="$sed/p"# stream edit the list as above
# and pass the commands to a shell
pip3 freeze --local |sed -rn "$sed" |sh

[3]升级还用于升级Python或PIP组件的Python或PIP组件可能是导致死锁或软件包数据库损坏的潜在原因。


#19楼

我在升级时遇到了同样的问题。 问题是,我从不升级所有软件包。 我只升级我需要的东西,因为项目可能会中断。

因为没有简便的方法可以逐个软件包升级软件包并更新requirements.txt文件,所以我写了这个pip-upgrader ,它为所选软件包(或所有软件包) 更新了requirements.txt文件中的版本

安装

pip install pip-upgrader

用法

激活您的virtualenv(这很重要,因为它还将在当前virtualenv中安装新版本的升级软件包)。

cd进入您的项目目录,然后运行:

pip-upgrade

高级用法

如果需求放置在非标准位置,请将其作为参数发送:

pip-upgrade path/to/requirements.txt

如果您已经知道要升级的软件包,只需将它们作为参数发送:

pip-upgrade -p django -p celery -p dateutil

如果需要升级到发行前/发行后版本,请在命令中添加--prerelease参数。

全面披露:我写了这个包裹。


#20楼

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

之后应确保没有依赖项被破坏。


#21楼

在点子问题讨论中找到的最简单,最快的解决方案是:

sudo -H pip install pipdate
sudo -H pipdate

来源: https : //github.com/pypa/pip/issues/3819


#22楼

怎么样:

pip install -r <(pip freeze) --upgrade

#23楼

使用awk更新包: pip install -U $(pip freeze | awk -F'[=]' '{print $1}') Frozen pip install -U $(pip freeze | awk -F'[=]' '{print $1}')

Windows Powershell更新foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}


#24楼

pip_upgrade_outdated完成了这项工作。 根据其文档 :

usage: pip_upgrade_outdated [-h] [-3 | -2 | --pip_cmd PIP_CMD][--serial | --parallel] [--dry_run] [--verbose][--version]Upgrade outdated python packages with pip.optional arguments:-h, --help         show this help message and exit-3                 use pip3-2                 use pip2--pip_cmd PIP_CMD  use PIP_CMD (default pip)--serial, -s       upgrade in serial (default)--parallel, -p     upgrade in parallel--dry_run, -n      get list, but don't upgrade--verbose, -v      may be specified multiple times--version          show program's version number and exit

第1步:

pip install pip-upgrade-outdated

第2步:

pip_upgrade_outdated

#25楼

在Windows上最短,最简单。

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

#26楼

使用pipupgrade

$ pip install pipupgrade
$ pipupgrade --latest --yes

pipupgrade可帮助您从requirements.txt文件升级系统,本地或软件包! 它还有选择地升级不会破坏更改的软件包。 pipupgrade还确保升级存在于多个Python环境中的软件包。 与Python2.7 +,Python3.4 +和pip9 +,pip10 +,pip18 +,pip19 +兼容。

注意:我是该工具的作者。


#27楼

您可以使用以下Python代码。 与pip freeze不同,这不会打印警告和FIXME错误。 对于点<10.0.1

import pip
from subprocess import callpackages = [dist.project_name for dist in pip.get_installed_distributions()]
call("pip install --upgrade " + ' '.join(packages), shell=True)

对于点> = 10.0.1

import pkg_resources
from subprocess import callpackages = [dist.project_name for dist in pkg_resources.working_set]
call("pip install --upgrade " + ' '.join(packages), shell=True)

#28楼

您可以只打印过时的软件包

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

#29楼

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

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

#30楼

Windows版本,查阅了Rob的出色的FOR 文档之后

for /F "delims===" %i in ('pip freeze -l') do pip install -U %i

如何使用pip升级所有Python软件包?相关推荐

  1. Python | 如何使用pip升级所有Python软件包?

    While using Python as a programming language, it's a very common scenario to use a virtual environme ...

  2. 五、pip升级、python升级及旧版本删除

    1. pip升级 长时间没用的python,系统提示pip版本太低了,建议升级 但不要根据它的提示升级,应使用一下命令即可: python -m pip install --upgrade pip 等 ...

  3. pip 升级安装 Python 库

    Python 三方库地址:https://pypi.org 1.Linux 安装 pip3 & 卸载旧版本 Python一般会自带pip,因此用户不需要自己安装pip,但是Python自带的p ...

  4. python二郎成长笔记(一)(pip升级,python入门,基础,python2和3不同格式带来的问题,头文件引用的格式,变量的类型,__name__ == '__main__')

    二郎的操作系统是windows,之前同时安装了python2和python3,因此在一些应用中还涉及了版本切换以及安装插件等问题. 同时安装是指在Anaconda中完成的,Anaconda(官方网站) ...

  5. t系列服务器更换pip升级版本,Python更新pip出现错误解决方法

    Backbone中的model和collection在做save或者create操作时, 如何选择用POST还是PUT方法 ? Model和Collection和后台的WEB server进行数据同步 ...

  6. python pip升级 指向不同python版本

    pip升级: pip install -U pip 查看版本: pip -V 查找pip安装位置 which pip 修改pip指向的python版本: vi pip # 修改第一行: #!/usr/ ...

  7. Python中使用python -m pip install --upgrade pip升级pip时老是不成功

    场景 在使用python -m pip install --upgrade pip进行pip升级时,每次到最后就是报一大堆红色,最终升级不成功. 实现 使用默认的镜像源时间过长就会没响应,使用豆瓣的镜 ...

  8. Python: pip升级报错了:You are using pip version 10.0.1, however version 20.3.3 is available.

    1,Python使用命令:python -m pip install --upgrade pip升级pip的时候报了下面这个错 2,换了个命令: python -m pip install --upg ...

  9. python中升级pip报错_linux系统下pip升级报错的解决方法

    Pip 安装 1.在python中提供了一个get-pip.py;下面是地址 https://bootstrap.pypa.io/get-pip.py 2.在Linux下执行curl https:// ...

最新文章

  1. GCB | 南土所冯有智组揭示了温度非线性的控制了全球土壤腐生真菌地理学分布...
  2. 继谷歌苹果微软也被曝人工收集用户语音数据,微软公开承认了
  3. vs显式导入(代码注入)依赖库
  4. 【网址收藏】在win10中使用Minikube安装Kubernetes
  5. 【干货分享】前端面试知识点锦集02(CSS篇)——附答案
  6. 华为云企业级Redis评测第二期:大Key操作的影响
  7. 小米平板5最快有望7月发布:骁龙870/天玑12002K双版本
  8. 系统学习NLP(二十五)--语种识别landID
  9. SSH实战 · 唯唯乐购项目(下)
  10. 修改msde登录方式,设置sa密码为空
  11. activemq部署
  12. 优化UITableViewCell高度计算的那些事
  13. 【尚硅谷】JavaWeb
  14. RT-Thread与cubemx|74HC595驱动数码管详解
  15. 利用python调用百度api实现黑白图像处理
  16. TikTok引流独立站的方式
  17. 项目中统一日志文件配置
  18. android手机打魔兽,云计算+Android:手机直接玩魔兽
  19. securecrt启动mini2440卡在Please press Enter to activate this console问题已解决
  20. 告别传统模式 呼叫中心携手95013打造新生态圈

热门文章

  1. UItraIso 制作ubentu 系统失败
  2. 继承SectionIndexer,实现联系人侧边栏
  3. window平台下 Eclipse Ndk开发中的Method 'NewStringUTF' could not be resolved问题
  4. java nio使用_什么时候使用NIO?
  5. php安装问题_PHP安装十大经典问题
  6. sqlserver 替换字符串中的数字_VBA实用小程序60: 替换图表SERIES公式中的字符串...
  7. PHP学习笔记-PHP语言基础3
  8. xml tools属性详解
  9. uni-app编译配置
  10. kali linux 学习 NETCAT NC的使用