Sublime不自动继承终端环境变量,因其GUI启动时不加载shell配置文件;必须在.sublime-build的env字段显式设置PYTHONPATH、PATH等,且需用$project_path动态拼接路径、Windows用分号分隔、macOS/Linux用冒号,并彻底退出进程才能生效新配置。

Sublime 不自动继承你终端里设的 PYTHONPATH、JAVA_HOME 或 PATH,哪怕你在 ~/.zshrc 里写得再全,GUI 启动的 Sublime 就是看不到——这是所有环境变量问题的起点。
为什么终端能跑,Sublime 构建系统却报 “command not found”
根本原因:Sublime 主进程启动时,不加载 shell 配置文件(~/.zshrc、~/.bash_profile、Windows 的系统环境变量面板),也不读注册表或 /etc/environment。它只认两处变量:
- 构建系统配置中显式写的
env字段(仅作用于当前构建进程) - 启动 Sublime 时父进程传入的环境(极难稳定复现,Mac 上用
subl命令从已 source 过的终端启动才可能带一部分,但不可靠)
所以 echo $PATH 在终端里输出正常,import os; print(os.environ.get('PATH')) 在 Sublime 控制台里却为空或极短,不是 bug,是设计如此。
Build System 里怎么写 env 才真正生效
env 必须是 JSON 对象,直接嵌在 .sublime-build 文件顶层,不能套在 variants 或其他字段里。常见错误是把路径拼错、漏引号、或误用变量语法。
-
PYTHONPATH要用:(macOS/Linux)或;(Windows)分隔多个路径,不能换行或空格 - 路径里别用
~,写绝对路径,比如"/Users/you/project/lib",否则 Python 导入失败 - Windows 上路径反斜杠要双写:
"C:\Python311\Lib\site-packages" - 如果项目结构固定,优先用
$project_path动态拼接:"PYTHONPATH": "$project_path/lib:$project_path/utils"
示例(macOS/Linux):
{
"cmd": ["python3", "-u", "$file"],
"working_dir": "$file_path",
"env": {
"PYTHONPATH": "$project_path/src:$project_path/external/lib"
}
}
PATH 不对导致 javac 或 g++ 找不到怎么办
构建系统找不到编译器,90% 是因为 PATH 没塞进 env,而不是系统没装好。尤其 Windows 用户,Microsoft Store 版 Python、pyenv 管理的 JDK、Homebrew 安装的 g++,路径都不在默认 PATH 里。
- 先在终端确认命令真实路径:
which javac(macOS/Linux)或where javac(Windows) - 把这个路径加到
env.PATH开头,用:或;连接原有值(Sublime 不提供$PATH变量,得手动拼) - Windows 示例:
"PATH": "C:\Program Files\Java\jdk-17.0.1\bin;C:\MinGW\bin;$PATH"(注意这里$PATH是 Sublime 支持的变量,会扩展为系统原始 PATH) - macOS/Linux 示例:
"PATH": "/opt/homebrew/bin:/usr/local/bin:$PATH"
别省略 $PATH —— 否则 python3、ls 这些基础命令也可能失效。
最易被忽略的“重启陷阱”
改完系统环境变量(如 JAVA_HOME 或全局 PATH)后,只关 Sublime 窗口没用。必须彻底退出进程(macOS:右键 Dock 图标 → “退出”;Windows:任务管理器杀 sublime_text.exe),再重新启动。否则旧环境变量还在内存里,新配置永远不生效。这点在 Java 和 Python 多版本共存场景下尤其致命——你以为切到了 JDK 17,其实 Sublime 还在用缓存里的 JDK 11 路径。

















