# PR #5209 完整报告

- 仓库：`verl-project/verl`
- 标题：[misc] fix: add missing __init__.py files to package directories
- 合并时间：2026-05-01 01:14
- 原文链接：http://prhub.com.cn/verl-project/verl/pull/5209

---

# 执行摘要

- 一句话：为 10 个包目录添加缺失的 __init__.py 文件
- 推荐动作：建议合并。此 PR 解决了一个实际的导入错误，结构简单，review 充分。值得关注的是，在添加 init 文件时注意版权归属的准确性，以及保持与目录中其他文件的一致性。

# 功能与动机

PR 描述指出目录中包含 Python 模块但未配置为包，导致导入失败。Issue 评论中 @SamitHuang 提到该修复解决了 verl-omni 升级时的 ModuleNotFoundError：`No module named 'verl.experimental.reward_loop.router'`。@ntenenz 也表示有 workaround 希望移除。

# 实现拆解

1. 识别缺失 `__init__.py` 的目录（experimental、utils、tools、trainer 等）。
2. 添加包含 Apache 2.0 许可证头部的空 `__init__.py` 文件。
3. 根据 review 更正部分文件的版权归属（如移除 VLA 的 Meituan 版权）。
4. 更新 .gitignore 添加 `workers/env/` 排除项。
5. 移除不含 Python 文件的目录中误加的 `__init__.py`（最终 commit）。

关键文件：
- `verl/experimental/reward_loop/router/__init__.py`（模块 奖励调度；类别 source；类型 entrypoint）: 解决了 verl-omni 导入 RewardModelManager 时的 ModuleNotFoundError
- `verl/experimental/fully_async_policy/__init__.py`（模块 全异步策略；类别 source；类型 entrypoint）: 使 fully_async_policy 包可导入，被用户 ntenenz 提及需要移除 workaround
- `verl/utils/sglang/__init__.py`（模块 SGLang 工具；类别 source；类型 entrypoint）: 使 utils/sglang 成为包，支持 SGLang 工具导入
- `verl/workers/rollout/trtllm_rollout/__init__.py`（模块 TRTLLM 推演；类别 source；类型 entrypoint）: 使 trtllm_rollout 包可导入，涉及版权讨论
- `verl/experimental/one_step_off_policy/__init__.py`（模块 单步离策略；类别 source；类型 entrypoint）: 使 one_step_off_policy 包可导入

关键符号：未识别


# 评论区精华

主要讨论围绕版权归属：vermouth1992 询问 trtllm_rollout 目录是否应由 Nvidia 许可，以及 VLA 目录是否由 Meituan 许可。guillemgt 确认 VLA 并非 Meituan 并修正，trtllm_rollout 版权与其他文件保持一致。此外，vermouth1992 要求合并主分支以适应文件夹结构变化，guillemgt 随后调整文件列表。

- 目录版权归属确认 (other): guillemgt 确认 VLA 不属于 Meituan 并修正版权；trtllm_rollout 版权与其他文件保持一致。

# 风险与影响

- 风险：风险极低，因为这些 `__init__.py` 文件不含运行时逻辑。唯一风险是版权归属错误可能导致法律问题，但已在 review 中纠正。添加 init 文件可能使原本通过其他方式导入的隐式包变为显式，但无实质影响。
- 影响：对用户：修复了这些模块的导入错误，用户不再需要 workaround。对系统：包结构更规范，IDE 和工具能正确识别包。对团队：无需额外维护，无兼容性问题。影响范围：所有使用 affected 模块的用户（如 fully_async_policy、reward_loop、SGLang 工具等）。
- 风险标记：暂无

# 关联脉络

- 暂无明显关联 PR