Sublime Text不读取系统环境变量,必须在.sublime-build中用env字段硬编码PYTHONPATH等路径,否则import会失败;env需为顶层JSON对象,路径用冒号(macOS/Linux)或分号(Windows)分隔,且须绝对路径或$project_path动态拼接。

单文件运行不需要全局环境变量,必须在 .sublime-build 里用 env 字段硬编码路径,否则 Ctrl+B 一定失败。
为什么终端能跑,Sublime 里 import xxx 就报错
Sublime GUI 启动时完全不读 ~/.zshrc、PATH 或 Windows 系统变量——它只认构建系统里显式写的 env。你在终端里 echo $PYTHONPATH 再长,Sublime 控制台里 os.environ.get('PYTHONPATH') 很可能为空。
- 验证方式:在 Sublime 控制台(
Ctrl+`)执行import os; print(os.environ.get('PATH')),对比终端输出 - 常见错误:把
env写在variants里、漏掉引号、用~代替绝对路径、Windows 路径没双写反斜杠 - macOS/Linux 要用冒号
:分隔多个路径;Windows 必须用分号;,且路径中空格需保留(如"C:\Program Files\Python311")
env 字段怎么写才生效
env 必须是 JSON 对象,直接放在 .sublime-build 文件顶层,不能嵌套。路径优先用 $project_path 动态拼接,避免硬编码用户目录。
- 单文件无项目结构时,用绝对路径:
"PYTHONPATH": "/Users/you/mylib:/Users/you/utils" - 有项目时推荐:
"PYTHONPATH": "$project_path/lib:$project_path/external" - Windows 示例:
"PATH": "C:\Python311;C:\Python311\Scripts;$PATH"(注意:Sublime 不提供$PATH变量,得手动拼;若要保留系统 PATH,必须查出原始值再粘进去) - Java 单文件编译时,
env不解决javac找不到的问题——那是cmd或shell_cmd的事,env只影响进程启动后的环境变量
中文源码、多 JDK、多 Python 解释器怎么处理
单文件场景下,最稳的方式是绕过环境变量,直接在构建命令里指定完整路径和参数。
- Python 中文源码:不用管
PYTHONIOENCODING,只要cmd里用python3 -u "$file",终端默认 UTF-8 就行 - Java 编译必须加
-encoding UTF-8,否则报“非法字符”;shell_cmd推荐写成:/usr/lib/jvm/jdk-17.0.1/bin/javac -encoding UTF-8 "$file" && /usr/lib/jvm/jdk-17.0.1/bin/java "$file_base_name" - 多个 Python 版本共存?别依赖
python命令,直接写死路径:"cmd": ["C:\Python39\python.exe", "-u", "$file"] - 如果用了
dotenv文件管理配置,装 EnvFile 插件即可自动注入,env字段里就不用重复写了
真正容易被忽略的是:改完 .sublime-build 后,必须彻底退出所有 Sublime 进程(macOS 右键 Dock 图标 → 退出,Windows 任务管理器杀光 subl.exe),否则旧环境缓存不会刷新。

















