Sublime 默认不继承系统环境变量,需在.sublime-build的env字段中显式配置PATH、PYTHONPATH等;跨平台应使用$file_path、$project_path等内置变量,避免硬编码路径。

Sublime 默认不继承系统环境变量,PATH、PYTHONPATH 等全都不自动生效——这不是配置错了,是它本来就不这么工作。
为什么终端能运行 python,Sublime 却报 “command not found”
因为 Sublime GUI 进程启动时绕过了 shell 初始化流程。你在 ~/.zshrc 或 Windows 系统环境变量里设的 PYTHONPATH、PATH,对 Sublime 主进程和构建子进程都不可见。
- macOS:从 Dock 或 Spotlight 启动 Sublime → 不读任何 shell 配置;只有用终端执行
subl命令启动,才可能带一部分已加载的变量(但不稳定,别依赖) - Windows:GUI 应用默认不查注册表里的系统环境变量,哪怕“环境变量”面板里写了
PATH,Sublime 构建系统也看不到 - Linux:桌面环境启动的 GUI 程序通常只继承极简的环境,
$PATH往往被截断成/usr/local/bin:/usr/bin:/bin,你装在/opt/下的工具就直接失踪
env 字段才是构建系统里唯一靠谱的环境变量入口
所有你想让 javac、python、lua 看到的变量,必须显式写进 .sublime-build 的 env 对象里,不能靠“系统有我就不用配”这种想法。
-
PYTHONPATH要加?得这么写:"env": {"PYTHONPATH": "$project_path/lib:$project_path/utils"} -
PATH要补自定义路径?必须完整拼:"env": {"PATH": "/opt/homebrew/bin:/usr/local/bin:$PATH"}(注意$PATH是 Sublime 内置变量,不是 shell 变量) - Java 项目要指定
CLASSPATH?同样填进env,别指望javac -cp参数能替代它 - Windows 上路径分隔符用分号
;,macOS/Linux 用冒号:,别混用
$file_path 和 $project_path 是跨平台路径安全的底线
硬编码绝对路径(如 C:\Python311\python.exe 或 /Users/me/.pyenv/versions/3.11.5/bin/python)看似直白,实则脆弱:换机器、换用户、换 Python 版本就失效。真正稳定的做法是用 Sublime 提供的内置变量动态拼接。
-
"working_dir": "$file_path"—— 保证编译、运行都在源文件所在目录,避免import找不到模块或资源文件打不开 -
"env": {"PYTHONPATH": "$project_path/src:$project_path/lib"}—— 项目一打开,路径就自动对齐;没开项目时$project_path为空,也不会炸 - 别用
~,Sublime 不展开波浪线;也别信$HOME,它不是内置变量,不会被替换 - 路径里含空格?
shell_cmd必须用双引号包裹整个命令,且$file等变量也要包在引号里,比如"shell_cmd": "python -u \"$file\""
最常被忽略的一点:Sublime 的 env 只作用于单次构建进程,不影响主程序、插件或其他构建系统。想验证是否生效,别只看输出结果,要在构建后立刻执行 import os; print(os.environ.get('PYTHONPATH')) —— 这才是真实现场。

















