应创建同名但存于packages/user/目录的python.sublime-build文件,用绝对路径指定解释器并禁用shell,避免升级重置;项目级配置则通过.sublime-project中build_systems字段实现优先覆盖。

怎么改 Python.sublime-build 才不被升级重置
不能直接编辑 Sublime 自带的 Python.sublime-build 文件——它在 Packages/Python/ 下,属于只读的 Default 包,每次升级都会覆盖。你真正该做的,是创建一个**同名但位置不同的新构建系统**,并让它在当前上下文中优先生效。
实操建议:
- 通过
Tools → Build System → New Build System…创建空白配置 - 写入完整路径的解释器,比如
"cmd": ["C:/Users/Me/.venv/myproj/Scripts/python.exe", "-u", "$file"](Windows)或"cmd": ["/opt/homebrew/bin/python3.14", "-u", "$file"](macOS) - 保存为
Python.sublime-build,但**必须存到Packages/User/目录下**(Sublime 会自动识别 User 目录下的同名文件并覆盖默认行为) - 重启 Sublime 或切换一次 Build System 再切回来,确认生效
注意:Packages/User/Python.sublime-build 和 Packages/Python/Python.sublime-build 是两个文件。前者不会被升级影响,后者永远只是备份参考。
为什么 shell: true 在 Windows 上容易出错
Windows 的 CMD 和 PowerShell 对引号、空格、路径转义的处理非常敏感。"shell": true 会让 Sublime 把整个 cmd 数组拼成一条 shell 命令执行,一旦 Python 路径含空格(如 C:Program FilesPython314python.exe),就会报 'C:Program' is not recognized 错误。
更稳的做法是关掉 shell,改用数组直传:
{
"cmd": ["C:\Program Files\Python314\python.exe", "-u", "$file"],
"selector": "source.python",
"file_regex": "^[ ]*File "(.+?)", line ([0-9]+)",
"working_dir": "$file_path"
}
要点:
- Windows 路径用双反斜杠
\或正斜杠/,避免单反斜杠被 JSON 解析为转义 - 去掉
"shell": true,让 Sublime 直接调用进程,绕过 shell 解析 - 加上
"working_dir": "$file_path",确保import或读取相对路径文件时行为符合预期
项目级构建系统怎么覆盖全局设置
当你有多个 Python 项目,各自用不同虚拟环境或 Python 版本时,靠全局 Python.sublime-build 不够用。这时要靠 .sublime-project 文件里的 build_systems 字段做精准控制。
操作流程:
- 先用
Project → Save Project As…生成myapp.sublime-project - 在该文件中添加
build_systems数组,例如:
{
"folders": [{ "path": "." }],
"build_systems": [
{
"name": "Python (venv)",
"cmd": ["./venv/bin/python", "-u", "$file"],
"selector": "source.python",
"working_dir": "$project_path"
}
]
}
关键点:
-
"name"必须唯一,且会在Tools → Build System菜单里显示 -
"cmd"中的路径是相对于$project_path的,不是用户家目录 - 保存后无需手动切换:只要当前窗口是该项目打开的,
Ctrl+B默认就走这个构建系统 - 如果同时存在全局
Python.sublime-build和项目内定义,项目级优先级更高
输出面板中文乱码或换行异常怎么办
构建输出面板默认编码是 cp1252(Windows)或 utf-8(macOS/Linux),但如果你的脚本 print 了中文、用了 emoji,或者输出超长没换行,面板可能显示方块、截断或挤成一行。
修复方式是在构建系统 JSON 中显式声明:
-
"encoding": "utf-8"—— 强制解码为 UTF-8,解决中文乱码 -
"word_wrap": true—— 开启自动换行,避免超长日志溢出视野 -
"quiet": false—— 确保构建开始/结束提示不被隐藏(默认就是 false,但显式写出更稳妥) - 若仍乱码,检查脚本本身是否用了 BOM:Windows 下某些编辑器保存的 UTF-8 文件带 BOM,Python 解释器可能解析异常;用 Sublime 另存为 “UTF-8”(不带 BOM)即可
最易被忽略的是:这些字段必须和 "cmd" 同级,不能缩进错层,也不能漏掉逗号——JSON 格式错误会导致整个构建系统静默失效,Ctrl+B 没反应也不报错。











