Python 批量更新已安装库的六种实用方法
本文详细介绍在 Python 环境中批量更新已安装库的六种方法。涵盖结合 Linux 命令行的技巧、利用 pip freeze 生成依赖文件、通过代码调用内部 API 以及使用 pkg_resources 和 pip-review 等第三方工具。同时探讨了官方全量升级命令的现状,帮助开发者高效管理项目依赖。
Python 批量更新已安装库的六种实用方法
通常,升级单个库(例如名为 xxx 的库)可以使用 pip install --upgrade xxx 命令,或者使用简写形式 pip install -U xxx。
若需升级多个库,只需在 xxx 后依次列出各库名,并用空格分隔。然而,如何简单且优雅地批量更新系统中所有已安装的库呢?
接下来直接切入主题,介绍几种实现批量升级的方法及技巧。
方法一:结合 pip list 与 Linux 命令
方法一:结合 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 提取第一列(即库名),最后将这些库名作为参数传递给升级命令。
(注:测试服务器配置了不同版本的 Python,因此指定了 python3。关于“-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 命令生成依赖文件,从而获取已安装库及其当前版本号:
pip freeze > requirements.txt
随后,将文件中的“==”替换为“>=”,接着执行:
pip install -r requirements.txt --upgrade
此方法特别适用于包含依赖文件的具体项目,可针对该项目所需库进行升级。
方法三:在代码中调用 pip 相关方法
方法三:在代码中调用 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 库
与方法二和方法三类似,还有一种替代方案。
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 库
pip-review 是一个专门用于简化 Python 库升级的工具,支持查看过期库、自动升级或交互式选择性升级:

此外还有类似的 pip-upgrader 库,同样旨在解决批量升级问题,感兴趣的用户可自行搜索。
方法六:pip 计划中的全量升级命令
方法六:pip 计划中的全量升级命令
pip 官方曾计划提供全量升级(upgrade-all)命令,若开发完成,这将是最佳选择。
然而,该计划因故停滞近三年,目前相关 issue 仍处于 Open 状态,具体进展时间未知。此处仅作提及,供未来关注。
前文介绍了六种方法,各有其适用场景,大家是否已掌握?
此外,还有其他方法,例如 StackOverflow 上“How to upgrade all Python packages with pip?”问题下提供了较多回答。
至此,关于 Python 批量更新已安装库的文章介绍完毕。如需了解更多相关内容,请搜索本站往期文章或继续阅读后续文章,感谢支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









