Python版本从3.6升级到3.8如何批量校验requirements依赖包兼容性
批量校验Python依赖包版本兼容性的可行方案
方案1:使用现成的校验工具
直接用dephell工具的兼容性检查功能,单条命令即可批量扫描整个requirements.txt:
- 首先安装工具:
pip install dephell - 执行校验命令:
dephell deps check --python=3.8 --from-path=requirements.txt
执行完成后会直接输出三类结果:兼容3.8的包、不兼容3.8的包、无明确分类器信息无法校验的包,300个依赖的扫描耗时通常在1分钟以内。
方案2:自行编写脚本批量校验
如果需要自定义校验逻辑,可以用Python脚本调用PyPI公开API拉取每个指定版本包的元数据,检查Programming Language分类器中是否包含Python 3.8的标识,示例代码逻辑如下:
import requests from packaging.requirements import Requirement def check_package_compat(pkg_name, pkg_version, target_py="3.8"): url = f"https://pypi.org/pypi/{pkg_name}/{pkg_version}/json" resp = requests.get(url) if resp.status_code != 200: return "unknown" classifiers = resp.json()["info"]["classifiers"] for c in classifiers: if c.startswith(f"Programming Language :: Python :: {target_py}"): return "compatible" return "incompatible" # 读取requirements.txt批量检查 with open("requirements.txt", "r") as f: for line in f: line = line.strip() if not line or line.startswith("#"): continue req = Requirement(line) pkg_name = req.name pkg_version = str(req.specs[0][1]) res = check_package_compat(pkg_name, pkg_version) print(f"{pkg_name}=={pkg_version}: {res}")
注意:脚本运行前需要先安装依赖:
pip install requests packaging,批量请求时可以适当加延迟避免被PyPI限流。
方案3:模拟安装校验(最准确)
如果分类器信息不全,可以直接在Python3.8的空白虚拟环境中尝试安装所有依赖,看是否有安装失败、导入报错的情况:
- 新建Python3.8的虚拟环境并激活
- 执行安装命令:
pip install -r requirements.txt --dry-run - 若需要更完整的校验,可以去掉
--dry-run参数实际安装后,批量导入所有包验证可用性
补充说明
- 部分包的分类器可能未及时更新但实际兼容3.8,这类包优先用模拟安装的方式校验
- 对于校验出来不兼容的包,可以直接查找该包的后续版本是否支持3.8,再对应调整版本号
内容的提问来源于stack exchange,提问作者Paolo
相关产品推荐
相关产品推荐

