执行摘要
- 一句话:修复CI中human-eval安装失败,通过固定setuptools版本为70.0.0。
- 推荐动作:这是一个简单的CI修复,对于理解setuptools版本管理和CI依赖问题有帮助,但无需精读。建议快速浏览以了解类似问题的解决模式,可作为CI配置优化的小技巧参考。
功能与动机
CI在5090运行器上失败,原因是切换到 nvidia/cuda:12.8.0-devel-ubuntu22.04 镜像后,uv pip install 将setuptools升级至最新(82.x),而 setuptools>=71 移除了 pkg_resources 模块,human-eval的 setup.py 导入了此模块。PR body中提供了失败示例链接,需恢复CI测试以确保代码变更的持续集成。
实现拆解
修改 .github/workflows/pr-test.yml 文件,在 stage-b-test-1-gpu-small 和 stage-b-test-2-gpu-large 两个作业的 run 部分,添加 pip install "setuptools==70.0.0" 命令,紧接在 bash scripts/ci/cuda/ci_install_dependency.sh 之后。这确保在克隆和安装human-eval仓库之前,setuptools版本被固定为70.0.0,该版本同时支持PEP 660可编辑安装和 pkg_resources 模块。提交历史显示从最初尝试去除可编辑模式,到最终固定版本,迭代解决兼容性问题。
关键文件:
.github/workflows/pr-test.yml(模块 CI基础设施): 添加setuptools版本固定命令以修复CI安装问题,是变更的唯一文件,直接影响CI流程
关键符号:未识别
评论区精华
review中,hnyls2002 询问:"Why not fix the version of setuptools",作者 alisonshao 回应担心固定精确版本(如70.0)可能与需要更高版本的包冲突,使用 <71 可以给pip灵活性来解决依赖冲突,同时保证 pkg_resources 存在。讨论聚焦于版本固定策略的设计权衡,最终提交采用了 ==70.0.0 作为折中方案,体现了CI环境中依赖管理的谨慎考虑。
- 版本固定策略 (design): 最终采用
setuptools==70.0.0 作为固定版本,平衡了兼容性和灵活性
风险与影响
- 风险:主要风险是版本依赖冲突:固定
setuptools==70.0.0 可能与其他需要更高版本setuptools的包不兼容,但此风险较低,因为仅在CI中特定步骤使用。此外,CI环境对setuptools版本敏感,未来setuptools变更可能导致类似问题复发,增加维护负担。风险限于CI脚本,不影响生产代码。
- 影响:直接影响是恢复CI中human-eval相关测试的通过,确保代码变更的持续集成测试功能正常,提高开发流程的稳定性。对用户和系统无直接影响,仅影响内部CI流程。影响范围局限于
.github/workflows/pr-test.yml 文件,程度较小,但有助于团队及时发现依赖问题。
- 风险标记:版本依赖冲突, CI脆弱性
关联脉络
- PR #21711 Remove flashinfer wheel cache cleanup that deletes other versions: 都是针对CI基础设施的bugfix,涉及依赖管理和缓存优化
- PR #21682 [diffusion] CI: relax pr-test threshold: 同样涉及CI测试配置调整,体现团队对CI流程的持续改进
参与讨论