Python 如何批量更新已安装的库


Posted in Python onMay 26, 2020

众所周知,升级某个库(假设为 xxx),可以用pip install --upgrade xxx 命令,或者简写成pip install -U xxx 。

如果有多个库,可以依次写在 xxx 后面,以空格间隔。那么,如何简单优雅地批量更新系统中全部已安装的库呢?

接下来我们直奔主题,带大家学习几种方法/骚操作吧!

方法一:pip list 结合 Linux 命令

pip list 命令可以查询已安装的库,结合 Linux 的一些命令(cut、sed、awk、grep……),可以直接在命令行中实现批量升级。

先查询一下,看看是什么格式的:

Python 如何批量更新已安装的库

可以看到,前两行是一些提示信息,我们需要从第 3 行开始过滤,那就可以使用awk 命令:

python3 -m pip list | awk 'NR>=3{print}' | awk '{print $1}' | xargs python3 -m pip install -U

解释一下这句命令的操作过程:先 list 查询,接着第一个 awk 取出行号大于等于 3 的内容,第二个 awk 取出第一列的内容,然后作为参数传给最后的升级命令。

(PS:测试服务器上有不同版本的 Python,所以作了指定。关于“-m”的用法,推荐阅读:Python 中 -m 的典型用法、原理解析与发展演变)

pip 还支持查询已过期的库,即使用pip list --outdated 命令。默认情况下,查询出的格式跟pip list 相似,有效内容从第三行开始,大家可以试试。

另外,我们还可以指定--format=freeze 格式,效果是这样的:

Python 如何批量更新已安装的库

这样的格式,可以用 cut 命令切割“=”号,然后取第一列:

pip list --outdated --format=freeze | cut -d = -f 1 | xargs pip install -U

以上命令在 Windows 系统中用不了。有没有更为通用的方法呢?

方法二:使用 pip freeze

如果是全量升级已安装的库,可以先用pip freeze 命令生成依赖文件,获取到已安装的库及其当前版本号:

pip freeze > requirements.txt

然后修改文件中的“==”为“>=”,接着执行:

pip install -r requirements.txt --upgrade

此方法比较适合于带有依赖文件的具体项目,可以针对该项目来升级所需的库。

方法三:代码中调用 pip 的方法

早期的 pip 库(<10.0.1)提供了 get_installed_distributions() 方法查询已安装的库,可以在代码中使用:

# 只在早期 pip 版本中用
import pip
from subprocess import call

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

在较新版本中,此方法已被废弃,同样的功能要这样写:

# 较新的 pip 版本。但不建议使用
from subprocess import call
from pip._internal.utils.misc import get_installed_distributions

for dist in get_installed_distributions():
  call("pip install --upgrade " + dist.project_name, shell=True)

但是,“_internal”带前缀下划线,表明它并不希望被导出使用。

方法四:使用 pkg_resources 库

跟方法二和方法三相似的还有一种方法。

pkg_resources 是 setuptools 库的一部分,用于查找和管理 Python 库、版本依赖关系、相关联的资源文件等。可以这样写:

# 需要安装 setuptools
import pkg_resources
from subprocess import call

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

方法五:使用 pip-review 库

pip-review 库是一个专门用来方便升级 Python 库的工具,可以查看已过期的库、自动升级或者交互式选择性地升级:

Python 如何批量更新已安装的库

还有一个类似的pip-upgrader 库,也是为了解决批量升级的问题,感兴趣的同学请自行搜索。

方法六:pip 计划的全量升级命令

pip 官方有计划要提供一个全量升级的(upgrade-all)命令,如果开发出来了,那应该会是最佳选择。

然后,坏消息是这个计划被阻塞了近三年,目前 issue 仍处于 Open 状态,不知道何时能有进展。这里暂且一提吧,未来留意。

Python 如何批量更新已安装的库 

前面介绍了六种方法,各有其适用的场景,小伙伴们都学会了么?

除此之外,当然还有其它的方法,比如 stackoverflow 网站上有个“How to upgrade all Python packages with pip?”问题,其下就有比较多的回答。

到此这篇关于Python 如何批量更新已安装的库的文章就介绍到这了,更多相关Python批量更新已安装库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python使用PIL模块实现给图片打水印的方法
May 22 Python
pycharm安装图文教程
May 02 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
Python 使用PIL中的resize进行缩放的实例讲解
Aug 03 Python
python机器学习之神经网络实现
Oct 13 Python
python try 异常处理(史上最全)
Mar 07 Python
详解python中的index函数用法
Aug 06 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
May 26 #Python
Python自定义聚合函数merge与transform区别详解
May 26 #Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 #Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 #Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 #Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 #Python
tensorflow从ckpt和从.pb文件读取变量的值方式
May 26 #Python
You might like
discuz的php防止sql注入函数
2011/01/17 PHP
php防止用户重复提交表单
2015/11/02 PHP
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
Python实现的Kmeans++算法实例
2014/04/26 Python
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
Python实现优先级队列结构的方法详解
2016/06/02 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
2019/12/11 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
运动会开幕式邀请函
2014/02/03 职场文书
总经理工作职责范文
2014/03/14 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
个人廉洁自律总结
2015/03/06 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python