sublime构建系统中pythonpath需在.build配置的env字段显式设置,不继承shell环境变量;mac须用subl命令启动才可能继承,windows不读系统变量;推荐用$project_path写死路径,避免跨平台问题。

Sublime 构建系统里 PYTHONPATH 不生效?先确认变量作用域
Sublime 的构建系统(.sublime-build)本身不继承 shell 启动时的环境变量,比如你终端里 echo $PYTHONPATH 能看到值,但 Sublime 里 python -c "import sys; print(sys.path)" 就不会包含它——这是最常被忽略的前提。
真正起作用的是构建系统配置里的 env 字段,且它只影响当前构建进程,不影响 Sublime 主进程或其他插件。
- 不要指望把
export PYTHONPATH=...写进~/.zshrc或~/.bash_profile就能让 Sublime 自动加载(GUI 应用通常不读这些) - Mac 用户尤其要注意:从 Dock 或 Spotlight 启动 Sublime,默认不加载 shell 配置;必须用
subl命令从已 source 过环境的终端启动,才可能继承部分变量(但不可靠) - Windows 用户别依赖系统环境变量面板设置的
PYTHONPATH,Sublime 构建系统默认不读注册表或系统级变量
怎么在 .sublime-build 里正确设置 PYTHONPATH
直接在构建配置的 env 对象里写死路径最稳,避免路径拼接错误或跨平台问题。
例如,你想让 Python 导入当前项目根目录下的 lib/ 和 utils/:
{
"cmd": ["python", "-u", "$file"],
"file_regex": "^[ ]*File "(...*?)", line ([0-9]*)",
"selector": "source.python",
"env": {
"PYTHONPATH": "$project_path/lib:$project_path/utils"
}
}
-
$project_path是 Sublime 内置变量,指向当前打开的文件夹(不是文件所在目录),确保路径有效 - Windows 下用分号分隔:
"PYTHONPATH": "$project_path\lib;$project_path\utils" - 别用
$file_path替代$project_path,它指向当前编辑文件的目录,多文件项目下极易错乱 - 如果要追加而非覆盖默认
PYTHONPATH,得先用 shell 命令读取再拼接,但会牺牲跨平台性,一般不推荐
构建时想动态传参?别硬塞环境变量,用 shell_cmd + $file 更可控
用户常误以为“传递变量”就是设环境变量,其实多数场景只是想让脚本接收命令行参数,比如运行 python main.py --env dev。
这时候改用 shell_cmd 并显式拼接参数,比折腾 env 简洁得多:
{
"shell_cmd": "python -u "$file" --env dev --debug",
"file_regex": "^[ ]*File "(...*?)", line ([0-9]*)",
"selector": "source.python"
}
-
shell_cmd支持所有 Sublime 变量($file、$file_base_name等),也支持原生 shell 语法 - 注意双引号包裹
$file,防止路径含空格时报错 - 如果参数来自用户输入,Sublime 没有内置交互式输入机制,得靠插件(如
InputPanel)实现,纯构建系统做不到 - 避免在
shell_cmd里调用source或conda activate,Sublime 启动的是独立子 shell,激活环境后立即退出,无效
为什么改了 .sublime-build 却没反应?检查这三处
构建系统不生效,90% 是配置没被正确加载或触发。
- 保存后没重启 Sublime:Sublime 不热重载构建系统,改完必须重启或手动执行
Tools → Build System → New Build System…再保存一次 - 构建系统未被选中:右下角状态栏查看当前激活的构建系统是否是你刚改的那个,名字要完全匹配(包括空格和大小写)
- 路径里有中文或特殊字符:Sublime 在某些版本对非 ASCII 路径解析异常,临时改英文路径测试可快速定位
复杂点在于:Sublime 构建系统的 env 是浅合并,父级配置(如全局默认)和当前构建配置同名键会覆盖,而不是叠加。这点很容易被当成 bug,其实是设计如此。











