pip list --outdated仅列出pypi上存在新版本的已安装包,不检查本地开发包、镜像源同步状态或python/依赖兼容性,且无--all参数;需配合--format=freeze、--exclude等筛选,并人工验证升级安全性。

用 pip list --outdated 看哪些包真过期了
直接跑 pip install --upgrade --all 是错的——pip 根本没有这个参数,会报错 ERROR: unrecognized arguments: --all。先得确认哪些包确实需要升级:pip list --outdated 输出的是当前环境中所有已安装但有新版的包,包括版本号和最新可用版本。注意它默认只检查 PyPI 上的包,不包含本地安装(pip install -e .)或通过 --find-links 安装的包。
如果输出为空,不代表没过期——可能是网络问题、索引超时,或你用了镜像源但镜像不同步。可以加 --timeout 10 或换源试试:pip list --outdated --index-url https://pypi.org/simple/。
安全升级:逐个升级比一键全升更靠谱
批量升级看似省事,但实际容易引发依赖冲突或运行时崩溃。比如 requests 升到 2.32.0,可能让依赖它的 urllib3 的老项目直接报 <code>ImportError。推荐用脚本控制节奏:
- 用
pip list --outdated --format=freeze输出package==old_version格式,再提取包名 - 对每个包单独执行
pip install --upgrade <package_name></package_name>,失败就停,人工介入 - 跳过某些关键包(如
django、numpy),用--exclude django,numpy参数(需自写脚本过滤)
一个最小可行脚本示例(保存为 upgrade_outdated.py):
TikHub API 多平台数据爬取工具,支持抖音/TikTok/B站等。用户提及以下需求时调用:1) 爬取视频或评论;2) 获取用户信息/粉丝列表;3) 批量下载无水印视频;4) 抖音链接转文字(下载→音频→Whisper pipeline);5) 调用 TikHubAPI。
import subprocess
import sys
<p>result = subprocess.run([sys.executable, '-m', 'pip', 'list', '--outdated', '--format=freeze'],
capture_output=True, text=True)
for line in result.stdout.strip().split('\n'):
if not line or '==' not in line:
continue
package = line.split('==')[0]
if package in ['django', 'numpy']: # 可按需调整黑名单
continue
subprocess.run([sys.executable, '-m', 'pip', 'install', '--upgrade', package])</p>
升级后必须验证,尤其 requirements.txt 不自动更新
pip install --upgrade 不会改写你的 requirements.txt,里面还是旧版本号。下次别人用它重装环境,依然装旧版。所以升级完得手动同步:
- 运行
pip freeze > requirements.txt——但会把所有包都写进去,包括开发依赖 - 更准的做法是只导出直接依赖:
pipdeptree --reverse --packages <your_main_package> | grep "├──" | awk '{print $2}' | xargs pip show | grep -E "Name:|Version:"</your_main_package> - 或者用
pipreqs重新扫描代码生成依赖列表(pip install pipreqs,然后pipreqs ./ --savepath requirements.txt)
另外,升级后务必跑一遍单元测试或至少启动服务看是否报错——很多兼容性问题只在运行时暴露,比如 asyncio 相关库升级后出现 RuntimeWarning: coroutine 'xxx' was never awaited。
别忽略 pip 自身版本过期带来的问题
如果你的 pip 版本太老(比如 20.x),它可能无法正确解析新包的 pyproject.toml 元数据,导致升级失败或装错版本。检查方法:pip --version。升级 pip 本身要单独做:python -m pip install --upgrade pip。注意:不要用 pip install --upgrade pip,某些旧版本会因路径锁定失败;用 python -m pip 更可靠。
还有个小陷阱:venv 创建时自带的 pip 版本是冻结的,哪怕系统 pip 已升级,虚拟环境里的 pip 不会自动更新。每次新建 venv 后最好第一件事就是升级它。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










