
作者:豌豆花下猫
来源: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 官方有计划要提供一个全量升级的(upgrade-all)命令,如果开发出来了,那应该会是最佳选择。
然后,坏消息是这个计划被阻塞了近三年,目前 issue 仍处于 Open 状态,不知道何时能有进展。这里暂且一提吧,未来留意。
前面介绍了六种方法,各有其适用的场景,小伙伴们都学会了么?
除此之外,当然还有其它的方法,比如 stackoverflow 网站上有个“How to upgrade all Python packages with pip?”问题,其下就有比较多的回答。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
随机森林算法的核心特点:原理、优势与应用解析 在机器学习领域,随机森林(Random Forest)作为集成学习(Ensemble Learning) ...
2025-09-05Excel 区域名定义:从基础到进阶的高效应用指南 在 Excel 数据处理中,频繁引用单元格区域(如A2:A100、B3:D20)不仅容易出错, ...
2025-09-05CDA 数据分析师:以六大分析方法构建数据驱动业务的核心能力 在数据驱动决策成为企业共识的当下,CDA(Certified Data Analyst) ...
2025-09-05SQL 日期截取:从基础方法到业务实战的全维度解析 在数据处理与业务分析中,日期数据是连接 “业务行为” 与 “时间维度” 的核 ...
2025-09-04在卷积神经网络(CNN)的发展历程中,解决 “梯度消失”“特征复用不足”“模型参数冗余” 一直是核心命题。2017 年提出的密集连 ...
2025-09-04CDA 数据分析师:驾驭数据范式,释放数据价值 在数字化转型浪潮席卷全球的当下,数据已成为企业核心生产要素。而 CDA(Certified ...
2025-09-04K-Means 聚类:无监督学习中数据分群的核心算法 在数据分析领域,当我们面对海量无标签数据(如用户行为记录、商品属性数据、图 ...
2025-09-03特征值、特征向量与主成分:数据降维背后的线性代数逻辑 在机器学习、数据分析与信号处理领域,“降维” 是破解高维数据复杂性的 ...
2025-09-03CDA 数据分析师与数据分析:解锁数据价值的关键 在数字经济高速发展的今天,数据已成为企业核心资产与社会发展的重要驱动力。无 ...
2025-09-03解析 loss.backward ():深度学习中梯度汇总与同步的自动触发核心 在深度学习模型训练流程中,loss.backward()是连接 “前向计算 ...
2025-09-02要解答 “画 K-S 图时横轴是等距还是等频” 的问题,需先明确 K-S 图的核心用途(检验样本分布与理论分布的一致性),再结合横轴 ...
2025-09-02CDA 数据分析师:助力企业破解数据需求与数据分析需求难题 在数字化浪潮席卷全球的当下,数据已成为企业核心战略资产。无论是市 ...
2025-09-02Power BI 度量值实战:基于每月收入与税金占比计算累计税金分摊金额 在企业财务分析中,税金分摊是成本核算与利润统计的核心环节 ...
2025-09-01巧用 ALTER TABLE rent ADD INDEX:租房系统数据库性能优化实践 在租房管理系统中,rent表是核心业务表之一,通常存储租赁订单信 ...
2025-09-01CDA 数据分析师:企业数字化转型的核心引擎 —— 从能力落地到价值跃迁 当数字化转型从 “选择题” 变为企业生存的 “必答题”, ...
2025-09-01数据清洗工具全景指南:从入门到进阶的实操路径 在数据驱动决策的链条中,“数据清洗” 是决定后续分析与建模有效性的 “第一道 ...
2025-08-29机器学习中的参数优化:以预测结果为核心的闭环调优路径 在机器学习模型落地中,“参数” 是连接 “数据” 与 “预测结果” 的关 ...
2025-08-29CDA 数据分析与量化策略分析流程:协同落地数据驱动价值 在数据驱动决策的实践中,“流程” 是确保价值落地的核心骨架 ——CDA ...
2025-08-29CDA含金量分析 在数字经济与人工智能深度融合的时代,数据驱动决策已成为企业核心竞争力的关键要素。CDA(Certified Data Analys ...
2025-08-28CDA认证:数据时代的职业通行证 当海通证券的交易大厅里闪烁的屏幕实时跳动着市场数据,当苏州银行的数字金融部连夜部署新的风控 ...
2025-08-28