sublime text 通过将 .sublime-build 文件置于 packages/user/ 目录下,配合正确命名、shell_cmd 全路径调用及 source.python 等 selector 设置,可实现 python 多版本与虚拟环境的自由切换;务必用 sys.executable 验证实际执行解释器。

Sublime Text 本身不支持“同时启用多个构建系统”,但能通过多个 .sublime-build 文件实现 Python 2/3、不同虚拟环境、甚至不同项目专用解释器的自由切换——关键不是写得有多复杂,而是文件放哪、名字怎么起、cmd 或 shell_cmd 怎么写才不踩坑。
文件必须放在 Packages/User/ 目录下才生效
Sublime 只扫描固定路径:Packages/User/。其他位置(比如项目根目录、桌面、或 Packages 下其他子目录)的 .sublime-build 文件一律被忽略。
- Windows 路径通常是:
%APPDATA%\Sublime Text\Packages\User\ - macOS 路径是:
~/Library/Application Support/Sublime Text/Packages/User/ - Linux 路径是:
~/.config/sublime-text/Packages/User/ - 最稳的方式:Preferences → Browse Packages… → 进入
User文件夹再保存 - 常见错误:
Python3.sublime-build保存成了Python3.json或Python3.sublime-build.txt(隐藏后缀),菜单里就看不到
cmd 和 shell_cmd 别混用,跨平台优先选 shell_cmd
cmd 是数组形式,由 Sublime 直接调用进程,不经过 shell;shell_cmd 是字符串,交给系统 shell(sh 或 cmd.exe)执行。多数 Python 场景用 shell_cmd 更省心,尤其涉及路径空格、环境变量或管道时。
- 推荐写法(兼容空格路径):
"shell_cmd": "python3 -u \"$file\"" - Windows 用户慎用
py -3.11 -u "$file":py 启动器会把-u当作传给 Python 的参数,但实际它只认紧挨版本号的参数,容易报unrecognized arguments: -u - 想用 conda/poetry/venv?别依赖
PATH,直接写全路径更可靠:"shell_cmd": "/Users/you/project/venv/bin/python -u \"$file\"" - Windows 路径可用正斜杠:
"shell_cmd": "C:/project/venv/Scripts/python.exe -u \"$file\""(比双反斜杠清爽)
selector 决定它“该不该出现”,不是可有可无的字段
这个字段控制 Sublime 在打开某类文件时,是否把这个构建系统列进 Tools → Build System 菜单。它匹配的是语法高亮类型(syntax),不是文件扩展名。
- Python 文件通常对应:
"selector": "source.python" - TypeScript 文件是:
"selector": "source.ts" - 查不准?打开目标文件 →
Ctrl+Shift+P→ 输入Syntax: Show Syntax,看输出的值 - 想让一个构建系统对 Python 和 JS 都生效:
"selector": "source.python, source.js" - 删掉
selector?它会出现在所有文件类型的菜单里,干扰大,且可能误触发
验证是否真在用你指定的 Python
光看菜单勾选了没用,得确认实际执行的是哪个解释器。最直接的办法是在 Python 文件里加两行:
import sys print(sys.executable)
运行后看输出路径,和你 .sublime-build 里写的是否一致。特别注意:
- 如果输出的是系统默认
/usr/bin/python或C:\Python39\python.exe,说明cmd或shell_cmd没生效,大概率是路径写错、文件没放对位置、或selector不匹配导致 Sublime 根本没选中它 - 虚拟环境路径写错一个字母,或 venv 没激活(其实不用激活,但路径必须真实存在),就会 fallback 到系统 Python
- macOS 上用 Homebrew 安装的 python3,路径通常是
/opt/homebrew/bin/python3,不是/usr/local/bin/python3
真正麻烦的从来不是建几个文件,而是每次换机器、换项目、换 Python 管理工具(venv / conda / pyenv / poetry)时,shell_cmd 里的路径都要重新核对一遍——建议把常用解释器路径记在项目 README 里,或者用 shell 脚本封装调用逻辑。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











