Prhub

#25817 fix: add missing distro dependency to runtime docker image

原始 PR 作者 mvanhorn 合并时间 2026-05-20 15:46 文件变更 1 提交数 1 评论 1 代码增减 +1 / -0

执行摘要

向 sglang 运行时添加缺失的 distro 依赖

用户反馈运行 runtime Docker 镜像 (lmsysorg/sglang:v0.5.12-cu130-runtime) 时,在 launch_server.py 执行路径中遇到 ModuleNotFoundError: No module named 'distro' 错误,而非 runtime 镜像则正常工作。问题定位显示 entrypoints/openai/protocol.py 在服务器导入时会 import distro,但 runtime 镜像在构建时剥离了该依赖。PR 作者在 body 中明确说明该修复旨在通过 pyproject.toml 声明依赖,使所有安装路径都能获得 distro

值得合并,修复明确、改动微小且经过充分测试计划验证。该 PR 也展示了在处理 Docker 镜像依赖丢失问题时,在 pyproject.toml 层面声明依赖是最直接可靠的方案。未来若其他依赖也遇到类似问题,可参考此 PR。

讨论亮点

该 PR 只有一条 reporter 评论(由 gemini-code-assist 机器人自动生成,提示达到每日配额限制),无人工 review 讨论。PR body 中作者已详细描述了动机、复现步骤、修复方案和测试计划,因此讨论较少。

实现拆解

  1. 修改配置文件:在 python/pyproject.tomldependencies 列表中添加 "distro" 条目(不指定版本号,因为 distro 包体积小、遵循语义化版本且多年无破坏性变更)。
  2. 补丁位置:插入在 "cuda-python==12.9""decord2" 之间的空行之后,保持字母顺序一致性。
  3. 测试验证:PR 作者列出了 5 项测试计划,包括在 runtime 镜像中重现错误、确认修复、pip 安装验证、防御性导入测试(在 distro 被卸载时仍能降级工作)以及 CI 回归测试。尽管测试未以代码形式提交,但依赖声明本身是配置变更,CI 中依赖检查会覆盖。
文件 模块 状态 重要度
python/pyproject.toml 项目配置 modified 3.16

关键源码片段

python/pyproject.toml configuration

这是唯一的变更文件,在 `dependencies` 列表中新增 `"distro"` 依赖,修复了 runtime 镜像缺失 distro 模块的 bug。

# python/pyproject.toml
[project]
dependencies = [
    "IPython",
    # ... 其他依赖 ...
    "cuda-python==12.9",
    # 新增 distro 依赖:解决 runtime 镜像启动时 distro 模块缺失的 bug
    # 不锁版本,因为 distro 遵循 semver 且长期无破坏性变更
    "distro",
    "einops",
    # ... 其余依赖 ...
]

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。仅在 pyproject.toml 中添加一行依赖声明,不会影响任何现有代码逻辑。distro 是一个成熟且稳定的 PyPI 包,已广泛使用。唯一可能的风险是如果未来 distro 版本升级带来不兼容,但当前未固定版本且 distro 保持向后兼容。此外,PR body 中建议的防御性导入(try-except)未在此版本实现,但依赖声明已确保 distro 在标准安装中存在。

影响范围:所有通过 pip 安装 sglang 或使用 Docker 镜像的用户,特别是 runtime 镜像使用者。影响程度:正面——修复了 runtime 镜像启动失败的 bug,使所有安装方式都能正常工作。无负面兼容性影响。

依赖未固定版本

关联 Issue

#25693 [Bug] runtime docker image missing module "distro"

完整报告

参与讨论