sublime text配置python需用绝对路径加-u参数:先conda activate myenv,再which python或where python获取路径,填入"cmd":["/path/to/python","-u","$file"],禁用默认python包并统一各组件路径。

Build System 的 cmd 必须填绝对路径,不能写 python 或 conda activate
Sublime 的 Build System 不走 shell,conda activate myenv && python -u $file 这种写法完全无效。它只认解释器的绝对路径,且必须是目标 conda 环境里的 python 可执行文件。
正确做法是:
- 先激活环境:
conda activate myenv - 再查真实路径:
which python(macOS/Linux)或where python(Windows),以这个输出为准——别用conda which python,它可能返回 base 环境路径 - 路径示例:
/opt/miniconda3/envs/myenv/bin/python或C:/Users/you/anaconda3/envs/myenv/python.exe - Windows 路径含空格时,用正斜杠
C:/Program Files/...更稳妥;反斜杠需双写C:\Program Files\...
必须加 -u 参数,否则 print 和 input 会卡死
-u 是 Python 的无缓冲模式开关。不加的话,print() 输出不会实时刷到 Sublime 构建面板,input() 更是直接阻塞——这不是你代码的问题,是 Sublime 没有 TTY 环境导致的。
构建系统配置中,"cmd" 数组第二项必须是 "-u",第三项才是 "$file":
{
"cmd": ["/path/to/myenv/bin/python", "-u", "$file"],
"file_regex": "^\s*File "(.*?)", line ([0-9]*)",
"selector": "source.python",
"encoding": "utf-8"
}
Windows 用户若仍有中文乱码,可在同级加 "env": {"PYTHONIOENCODING": "utf-8"}。
多个 conda 环境别靠全局 Build System 切换
全局 Build System(存放在 Packages/User/ 下)一旦选中就全局生效,容易在不同项目间误用错环境。
更可靠的方式是用 .sublime-project 文件绑定:
- 菜单 Project → Save Project As…,保存为
myproject.sublime-project - 编辑该文件,在
"settings"下加入"build_systems"定义 - 每个项目只定义自己需要的环境,打开即自动加载,无需手动切换
示例片段:
"settings": {
"build_systems": [{
"name": "Python-ml-dev",
"cmd": ["C:/Users/you/anaconda3/envs/ml-dev/python.exe", "-u", "$file"]
}]
}
禁用 Sublime 自带的 Python 包,否则 Ctrl+B 一定出错
Sublime 默认自带一个叫 Python 的 Build System(不是 Anaconda 插件),它硬编码调用 PATH 中第一个 python,和你配的 conda 环境毫无关系。只要没禁用,按 Ctrl+B 就会触发它,导致 ModuleNotFoundError、乱码甚至崩溃。
解决方法极简:
- Preferences → Package Control → Disable Package
- 搜索并禁用名为
Python的包(注意不是Anaconda)
禁用后,Ctrl+B 不再响应,你只能显式选择自定义 Build System 或用 SublimeREPL 运行——这反而是安全的,避免了隐式调用错误解释器。
真正麻烦的不是路径怎么填,而是所有环节都依赖同一份绝对路径:Build System、Anaconda 插件的 python_interpreter、SublimeREPL 启动命令——三者不一致,补全、运行、调试就会各自失效。填完记得重启 Sublime Text,jedi 引擎不会热重载环境。











