点击蓝色“Python空间”关注我丫

加个“星标”,每天一起快乐的学习

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

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

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

方法一:pip list 结合 Linux 命令

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

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

可以看到,前两行是一些提示信息,我们需要从第 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 格式,效果是这样的:

这样的格式,可以用 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 库的工具,可以查看已过期的库、自动升级或者交互式选择性地升级:

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

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

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

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

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

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

python更新版本会丢失库吗_Python小技巧:如何批量更新已安装的库?相关推荐

  1. 奇技淫巧-STL 库 ACM算法小技巧(持续更新中~~~)

    STL 库中的奇技淫巧 STL 是惠普实验室开发的一系列软件的统称,可以理解为一些容器的集合.STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件.STL 现在是C++的一部分,因此不用额 ...

  2. python安装方法_Python如何批量更新已安装的库,为你介绍六种方法!

    众所周知,升级某个库(假设为 xxx),可以用pip install --upgrade xxx 命令,或者简写成pip install -U xxx . 如果有多个库,可以依次写在 xxx 后面,以 ...

  3. Python小技巧:如何批量更新已安装的库?

    众所周知,升级某个库(假设为 xxx),可以用pip install --upgrade xxx 命令,或者简写成pip install -U xxx . 如果有多个库,可以依次写在 xxx 后面,以 ...

  4. PyCharm中直接使用Anaconda已安装的库

    前言 实习生问:我咋看见你经常用Anaconda的jupyter notebook写python代码,为啥不用PyCharm呢? - 对于我个人而言现在主要的工作是数据分析,挖掘,直接下载Anacon ...

  5. python正则匹配空格+数字+空格_详解Python中正则匹配TAB及空格的小技巧

    详解Python中正则匹配TAB及空格的小技巧 发布时间:2020-10-15 08:38:48 来源:脚本之家 阅读:94 作者:杰瑞26 在正则中,使用.*可以匹配所有字符,其中.代表除\n外的任 ...

  6. python更新版本会丢失库吗_Python卸载后,随之的第三方库会消失吗

    2019-01-31 回答 python拥有一个强大的标准库.python语言的核心只包含数字.字符串.列表.字典.文件等常见类型和函数,而由python标准库提供了系统管理.网络通信.文本处理.数据 ...

  7. python查询模块所有类_python 小技巧(import模块、查询类继承关系、安装包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在这里列举一些我使用Python时积累的小技巧.这些技巧是我在使用Python过程 ...

  8. python win32转pdf 横版_Python 小技巧之 Office 文件转 PDF

    文章来源于公众号:Python技术 作者:派森酱 在日常的生活工作中,难免需要用到一些 小Tip 来解决工作中遇到的小难题,今天的文章给大家安利一个方便快捷的小技巧,将 Office(doc/docx ...

  9. python使用技巧_python小技巧

    平时开发中,一些使用的技巧,记录一下,持续更新---- 1.当函数默认参数为可变对象时,每次调用函数,是不会重新创建对象的 示例代码1: def ddd(a,b=[]): b.append(a)ret ...

最新文章

  1. Serverless特点及应用
  2. 如何用excle制作黑人拉馆_家居DIY带你学习如何用塑料勺制作壁挂!
  3. Spring@Autowired注解与自动装配
  4. [渝粤教育] 南开大学 思辨式英文写作 参考 资料
  5. python做一个linux网卡,Linux系统Python可以选择不同网卡进行网络访问吗?
  6. 全国大学生计算机技能应用大赛Java模拟题
  7. 蜘蛛搜索引擎_「SEO工具」如何利用爱站工具去分析各搜索引擎蜘蛛情况?
  8. 数据结构图文解析之:二分查找及与其相关的几个问题解析
  9. 基于NTT的循环码:RS码、BCH码、RM码
  10. 使用insightface进行人脸识别批量下载图片
  11. 计算机u口保护,U盘写保护怎么办?
  12. Winform当移入控件时,鼠标变手的通用方法
  13. Cmder | 一款命令行增强工具
  14. e7用什么主板_八路E7的下场如何?盘点历代至尊版处理器现价
  15. 计算机远程桌面连接连接不上,电脑远程桌面时常出现连接不上问题,怎么处理问题...
  16. android x86还是arm,Android x86是否模拟ARM?(Does Android x86 emulate ARM?)
  17. PyTorch常用的张量创建、变形及运算总结(速查表)
  18. 微信和qq哪个服务器好,王者荣耀微信区和QQ区选哪个比较好-王者荣耀哪个区比较好打 - QT软件园...
  19. 打车出行小程序APP定制开发代驾拼车专车
  20. 数学建模学习||竞赛心得||全国大学生数学建模竞赛||华为杯数学建模竞赛

热门文章

  1. 清华大学黄民烈老师:本科生如何做出好的科研
  2. 苹果怎么给软件加密码_用了2年苹果手机,才知道有这几个功能,钱没花冤枉,好用!!...
  3. 轩辕炼妖录java_一个Java对象的回忆录:那些被锁住的日子
  4. 根据我4年Facebook营销经验,和大家聊聊做不好Facebook广告的原因!
  5. 「镁客早报」第九城市与法拉第未来成立合资公司,出资6亿美元;华为获得韩国运营商5G订单,占比95%... 1
  6. PS如何制作酷炫个性字母人像海报
  7. xss攻击突破转义_每个人都应该了解的7种xss漏洞
  8. mysql sysdate 格式化_MySQL函数汇总
  9. dbexception.java,mysql – org.h2.jdbc.JdbcSQLException:找不到列“ID”
  10. python带参数怎么运行_如何运行带参数的python脚本