如何用 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 # 全部自动升级
方案二:脚本循环升级
# Linux/macOS
pip list --outdated --format=freeze | cut -d= -f1 | xargs -n1 pip install -U
# Windows (PowerShell)
pip list --outdated --format=json | ConvertFrom-Json | ForEach-Object { pip install -U $_.name }
方案三:requirements 文件法
pip freeze > requirements.txt
# 编辑 requirements.txt 把版本号去掉(pkg==1.0 → pkg)
pip install -U -r requirements.txt
注意事项
- 先备份:
pip freeze > backup.txt,升级出问题可以回滚; - 虚拟环境中操作:别直接升级系统 Python 的包,容易和系统工具冲突;
- 依赖冲突:盲目全升可能导致包之间版本不兼容,升级后跑一遍测试;
- 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 文件回滚:pip install -r backup.txt(注意先卸载多余的新版本)。这也是虚拟环境隔离的价值。