# PR #1967 完整报告

- 仓库：`THUDM/slime`
- 标题：Fix PYTHONBUFFERED typo to PYTHONUNBUFFERED=1
- 合并时间：2026-05-30 11:53
- 原文链接：http://prhub.com.cn/THUDM/slime/pull/1967

---

# 执行摘要

- 一句话：全局修复 PYTHONUNBUFFERED 环境变量拼写错误
- 推荐动作：值得快速合并。该修复解决了长期存在的无效环境变量问题，提升开发者体验和日志可靠性。

# 功能与动机

Issue #1966 指出 `PYTHONBUFFERED` 并非有效的 Python 环境变量，正确的名称是 `PYTHONUNBUFFERED`。设置 `PYTHONBUFFERED` 被静默忽略，因此注释中声称的 "prevent ray from buffering stdout/stderr" 并未生效。

# 实现拆解

1. 在核心模块 `slime/utils/external_utils/command_utils.py` 的 `execute_train` 函数中，将 `exec_command` 调用内错误的环境变量名替换为正确的 `PYTHONUNBUFFERED=1`（共两处）。
2. 对所有 shell 脚本（包括示例、测试和工具脚本）执行全局搜索替换，将 `export PYTHONBUFFERED=16` 改为 `export PYTHONUNBUFFERED=1`。
3. 同步更新 NPU 补丁文件 `docker/npu_patch/slime.patch`，保持与主代码一致。
4. 第二个提交中，根据 Copilot 指出的注释拼写错误，修正了 `scripts/low_precision/run-qwen3-30B-A3B-int4.sh` 中的注释 "stdout/stderrs" -> "stdout/stderr"。

关键文件：
- `slime/utils/external_utils/command_utils.py`（模块 命令工具；类别 source；类型 core-logic）: 核心源码文件，修复两处 exec_command 中的环境变量设置，是 Ray 启动和 job 提交时生效的关键路径。
- `tests/test_gspo.sh`（模块 测试脚本；类别 test；类型 test-coverage）: 测试脚本，验证 GSPO 训练环境变量设置正确。
- `docker/npu_patch/slime.patch`（模块 容器补丁；类别 infra；类型 infrastructure）: 基础设施补丁文件，同步更新 NPU 环境下的环境变量。
- `scripts/low_precision/run-qwen3-30B-A3B-int4.sh`（模块 低精度脚本；类别 other；类型 core-logic）: 示例脚本，同时修复了注释中的另一个拼写错误。
- `examples/eval_multi_task/multi_task.sh`（模块 多任务示例；类别 other；类型 core-logic）: 多任务评估示例脚本，体现变更覆盖范围。

关键符号：execute_train

## 关键源码片段

### `slime/utils/external_utils/command_utils.py`

核心源码文件，修复两处 exec_command 中的环境变量设置，是 Ray 启动和 job 提交时生效的关键路径。

```python
        if not external_ray:
            exec_command(
                # 防止 Ray 缓冲 stdout/stderr
                f"export PYTHONUNBUFFERED=1 && "
                f"ray start --head --node-ip-address {master_addr} --num-gpus {num_gpus_per_node} --disable-usage-stats"
            )

        # ...

        exec_command(
            f"export no_proxy=127.0.0.1 && export PYTHONUNBUFFERED=1 && "
            f"{cmd_megatron_model_source}"
            f'ray job submit --address="http://127.0.0.1:8265" '
            f"--runtime-env-json='{runtime_env_json}' "
            f"-- python3 {train_script} "
            f"{'${MODEL_ARGS[@]}' if megatron_model_type is not None else ''} "
            f"{train_args}"
        )

```

### `tests/test_gspo.sh`

测试脚本，验证 GSPO 训练环境变量设置正确。

```bash
#!/bin/bash

# ...

set -ex

# 防止 Ray 缓冲 stdout/stderr
export PYTHONUNBUFFERED=1

# ...

```

# 评论区精华

Copilot 在 review 中指出 `scripts/low_precision/run-qwen3-30B-A3B-int4.sh` 的注释中存在额外拼写错误 "stderrs"，该问题在后续提交中已修复。

- 注释拼写错误 (style): 已在后续提交中修复。

# 风险与影响

- 风险：该变更为纯文本替换，无逻辑变更。风险极低。但需确认所有 48 个文件均已正确替换，避免遗漏。
- 影响：使环境变量设置生效，Python 输出不再缓冲，提升日志实时性，有利于调试和日志收集。
- 风险标记：全局替换需确认覆盖完整

# 关联脉络

- PR #1966 [Bug] `PYTHONBUFFERED ` is not a python Environment Variable: 关联 issue，提供问题背景和修复理由。