如何用 pip 升级所有已安装的 Python 包?
pip 没有内置的"升级全部"命令,常用方案:pip list --outdated 逐个升级,或用脚本循环升级,或 pip-review 工具一键完成。本文介绍各种方案及注意事项。
pip 本身没有 pip upgrade --all。常用方案:用 pip list --outdated 查看可升级的包,然后逐批 pip install -U 包名;想一键升级全部可用第三方工具 pip-review 或写一行循环脚本。
方案一:pip-review(推荐)
pip install pip-review
pip-review --local --interactive # 逐个确认是否升级
pip-review --local --auto # 全部自动升级
方案二:脚本循环升级
python -m pip list --outdated --format=json > outdated.json
# 审核列表后,用同一解释器运行下面的Python脚本
import json
import subprocess
import sys
with open("outdated.json", encoding="utf-8") as f:
packages = [item["name"] for item in json.load(f)]
if packages:
subprocess.run([sys.executable, "-m", "pip", "install", "--upgrade", *packages], check=True)
方案三:requirements 文件法
pip freeze > requirements.txt
# 审核并更新预期依赖的版本范围,保留必要约束,不要盲目删除全部版本号
pip install -U -r requirements.txt
注意事项
- 先备份:
pip freeze > backup.txt,仅记录包版本,不是完整环境备份或可靠回滚; - 虚拟环境中操作:别直接升级系统 Python 的包,容易和系统工具冲突;
- 依赖冲突:盲目全升可能导致包之间版本不兼容,升级后运行 python -m pip check 及项目测试;一次解析并不保证所有未涉及已安装包都兼容;
- pip 自身:
python -m pip install -U pip单独升级。
常见问题(FAQ)
Q:pip install --upgrade * 能用吗?
A:不能。pip 不支持通配符包名,这条命令会报错。
Q:如何只升级补丁版本(不大版本跳跃)?
A:pip 没有直接支持,需要在 requirements 中用 ~= 约束(如 requests~=2.31.0 只允许 2.31.x);或用 pip-tools 管理。
Q:升级后项目跑不起来了?
A:优先在新的隔离环境按原锁定依赖和可用构建物重建并验证;freeze 不记录解释器、系统库或已消失的安装包,直接 install -r 也不会自动清除新增包。