Sublime Text构建系统必须使用虚拟环境Python的绝对路径,不能依赖$PATH或shell激活状态;需加-u参数避免输出缓冲,并通过.sublime-project绑定专属配置。

Sublime Text 构建系统必须填绝对路径,不能用 $PATH 或激活状态
Sublime Text 不会读取 shell 的 PATH,也不会感知你终端里是否执行过 source venv/bin/activate。它只认你写死在构建系统里的那个 python 可执行文件路径。哪怕你在终端里能直接敲 python 运行,Sublime 也大概率调用系统默认的 Python,导致 ModuleNotFoundError。
所以关键动作就一个:找到虚拟环境里真实的 python 文件位置,原封不动填进 "cmd" 字段。
- Windows 下路径类似:
C:/project/venv/Scripts/python.exe(注意用正斜杠或双反斜杠,避免单反斜杠被 JSON 当转义) - macOS/Linux 下路径类似:
/Users/name/project/venv/bin/python - 别猜路径,先激活环境再查:
conda activate myenv && which python(macOS/Linux)或conda activate myenv && where python(Windows) - 不用
conda which python—— 它有时返回 base 环境的路径,不可靠
Build System JSON 中 -u 参数不是可选,是必须加的
不加 -u,print() 输出会缓冲,Ctrl+B 运行后看不到实时日志;更严重的是,含 input() 的脚本可能直接卡住或报错 EOFError。这不是 Sublime 的 bug,是 Python 默认行为在非 TTY 环境下的表现。
示例正确写法:
立即学习“Python免费学习笔记(深入)”;
{
"cmd": ["<code>/path/to/venv/bin/python</code>", "-u", "$file"],
"file_regex": "^ File \"(.+?)\", line ([0-9]+)",
"selector": "source.python"
}
-
$file是 Sublime 内置变量,代表当前打开的 .py 文件路径,不要改成硬编码 - Windows 用户如果路径含空格(比如
C:/Program Files/...),务必确保整个路径字符串被双引号包裹,且 JSON 合法 - 保存时后缀必须是
.sublime-build,文件名建议用英文、无空格,如Python_VENV.sublime-build
不同项目要配不同 .sublime-build,没法“全局复用”
每个项目的虚拟环境路径都不同,意味着每个项目都需要一份专属的构建系统配置。你不能写一个通用模板然后到处复制粘贴路径 —— 一换项目就得改,容易出错。
更稳妥的做法是配合 .sublime-project 文件绑定构建系统:
- 菜单栏 Project → Save Project As…,存为
myproject.sublime-project - 编辑该文件,在
settings下加:"build_systems": [{"name": "Python_VENV"}] - 再把对应项目的
Python_VENV.sublime-build放到Packages/User/目录下 - 这样每次打开该项目,Ctrl+B 自动用对的解释器,不会误跑进其他 venv 或系统 Python
Conda 环境和 venv 的路径差异容易混淆
Conda 环境的 python 路径不固定,不像 venv 总是 venv/bin/python。比如 myenv 在 Conda 下实际可能是 /opt/miniconda3/envs/myenv/bin/python(macOS)或 C:/Users/Alice/Miniconda3/envs/myenv/python.exe(Windows)。
常见错误包括:
- 直接填
conda run -n myenv python—— Sublime 不支持这种 shell 命令式调用 - 用
python而不是完整路径 —— 必然 fallback 到系统 Python - 路径中混用斜杠类型,比如
C:\Users\Alice\envs\myenv\python.exe在 JSON 里会因反斜杠报错 - 没确认
python文件真实存在:有些 Conda 环境创建后未安装 Python 包,which python可能为空
最省事的方式永远是:先 conda activate myenv,再 which python 或 where python,复制输出结果,粘贴进 "cmd" 数组第一项。


















