Python包维护者如何确定各依赖的最低可用版本要求?
Python包最低兼容依赖版本半自动化实现方案
前置准备
先完成依赖分层,将运行依赖和开发依赖完全拆分:
- 类型检查工具、代码格式化工具、测试框架等仅开发阶段用到的依赖全部单独维护,不要纳入用户安装的依赖范围
- 遍历代码库所有import语句,过滤掉Python标准库模块,整理出仅运行时需要的第三方依赖清单
半自动化操作步骤
- 首先确定Python版本约束,你要求最低支持Python3.6,所有依赖的初始候选版本可以以2019年12月(Python3.6停止官方维护的时间)之前发布的版本为范围,避免出现依赖不支持目标Python版本的无效测试
- 安装
pip-tools工具,使用其中的pip-compile命令做依赖版本自动适配:- 新建
requirements.in文件,写入你整理好的运行依赖列表,每个依赖可以先预估一个较低的初始版本号,例如numpy>=1.13、matplotlib>=2.2 - 运行
pip-compile requirements.in,工具会自动匹配所有依赖之间的兼容版本组合,生成固定版本的requirements.txt,无需手动排查依赖间的版本冲突
- 新建
- 用二分法快速定位最低兼容版本:针对每个依赖,不用逐个版本测试,比如测试numpy最低版本时,先试1.12,能正常运行就试1.11,不能运行就试1.14,3-5次测试就能锁定最低可用版本
- 无全量自动化测试的临时适配方案:不用等全量测试用例开发完成,先编写3-5个覆盖核心功能的最简运行脚本,只要脚本在对应依赖版本环境下无报错、输出结果符合预期,即可判定当前版本兼容
额外优化技巧
如果后续要把依赖要求写到setup.py或者pyproject.toml里,只需要写入每个依赖的最低版本约束即可,不要固定死小版本,给用户留出版本升级的空间,也避免和用户其他依赖的版本产生强制冲突。
内容的提问来源于stack exchange,提问作者WIP
相关产品推荐
相关产品推荐

