# PR #21714 完整报告

- 仓库：`sgl-project/sglang`
- 标题：Fix human-eval CI install on 5090 runners
- 合并时间：2026-03-31 09:53
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/21714

---

# 执行摘要

- 一句话：修复 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 流程的持续改进