# PR #25817 完整报告

- 仓库：`sgl-project/sglang`
- 标题：fix: add missing distro dependency to runtime docker image
- 合并时间：2026-05-20 15:46
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/25817

---

# 执行摘要

- 一句话：向 sglang 运行时添加缺失的 distro 依赖
- 推荐动作：值得合并，修复明确、改动微小且经过充分测试计划验证。该 PR 也展示了在处理 Docker 镜像依赖丢失问题时，在 `pyproject.toml` 层面声明依赖是最直接可靠的方案。未来若其他依赖也遇到类似问题，可参考此 PR。

# 功能与动机

用户反馈运行 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`。

# 实现拆解

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

关键文件：
- `python/pyproject.toml`（模块 项目配置；类别 config；类型 configuration）: 这是唯一的变更文件，在 `dependencies` 列表中新增 `"distro"` 依赖，修复了 runtime 镜像缺失 distro 模块的 bug。

关键符号：未识别

## 关键源码片段

### `python/pyproject.toml`

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

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

```

# 评论区精华

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

- 暂无高价值评论线程

# 风险与影响

- 风险：风险极低。仅在 `pyproject.toml` 中添加一行依赖声明，不会影响任何现有代码逻辑。`distro` 是一个成熟且稳定的 PyPI 包，已广泛使用。唯一可能的风险是如果未来 `distro` 版本升级带来不兼容，但当前未固定版本且 distro 保持向后兼容。此外，PR body 中建议的防御性导入（try-except）未在此版本实现，但依赖声明已确保 distro 在标准安装中存在。
- 影响：**影响范围**：所有通过 pip 安装 sglang 或使用 Docker 镜像的用户，特别是 runtime 镜像使用者。**影响程度**：正面——修复了 runtime 镜像启动失败的 bug，使所有安装方式都能正常工作。无负面兼容性影响。
- 风险标记：依赖未固定版本

# 关联脉络

- 暂无明显关联 PR