Sublime Text 需配置构建系统才能运行 Python,本质是调用系统 python 命令;常见问题包括解释器路径错误、编码不匹配(需设 "encoding": "utf-8")及交互式输入不支持。

Sublime Text 不能直接“运行”Python,得靠构建系统
Sublime Text 本身不是 IDE,没有内置 Python 运行器。所谓“运行”,其实是调用系统已安装的 python 或 python3 命令执行当前文件。如果你按 Ctrl+B(Windows/Linux)或 Cmd+B(macOS)没反应、报错或输出乱码,大概率是构建系统没配对,或者终端环境和 Sublime 不一致。
- 检查系统是否真装了 Python:终端里运行
python --version或python3 --version看能否返回版本号 - 确认
python命令指向的是你想要的版本(比如想用 Python 3.11,但python指向的是 2.7,就会出问题) - Windows 用户尤其注意:PATH 里有
python.exe,但 Sublime 可能读不到——它默认用 shell 环境,而某些安装方式(如 Microsoft Store 版 Python)不写入全局 PATH
怎么配一个靠谱的 Python 构建系统(支持 python3 和虚拟环境)
路径:Tools → Build System → New Build System…,粘贴以下内容并保存为 Python3.sublime-build(文件名必须以 .sublime-build 结尾):
{
"shell_cmd": "python3 -u \"$file\"",
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"encoding": "utf-8",
"variants": [
{
"name": "Run in Terminal",
"shell_cmd": "gnome-terminal -- bash -c \"python3 -u '$file'; read -p 'Press Enter to continue...'\""
}
]
}
-
shell_cmd中的-u强制未缓冲输出,避免 print 不实时刷到面板 - macOS 用户把
gnome-terminal换成open -a Terminal或用osascript调起终端;Windows 用户可改用cmd /c python -u "$file" - 若项目用了
venv,把python3改成虚拟环境里Scripts/python.exe(Windows)或bin/python(macOS/Linux)的绝对路径,否则仍走系统 Python - 保存后,在右下角状态栏点击构建系统名称,选中刚建的
Python3,再按Ctrl+B
为什么 Ctrl+B 输出中文乱码?
常见于 Windows + 中文路径/中文字符串,本质是 Sublime 构建面板默认用系统 ANSI 编码(如 GBK)解码 UTF-8 输出。不是 Python 编码错了,是 Sublime 没认对。
- 最稳方案:在构建系统 JSON 里加
"encoding": "utf-8"(上面示例已包含) - 如果还乱码,检查 Python 文件开头是否有
# -*- coding: utf-8 -*-(Python 3 其实不需要,但某些旧插件会依赖) - 别用
input()测试——构建面板不支持交互式输入;要用的话必须切到终端运行(见上一个副标题里的Run in Terminal变体)
比构建系统更省心的替代方案:Terminal 或 Terminus 插件
构建系统适合简单脚本,但调试、进交互、跑 Flask/Django 就很别扭。这时候直接在 Sublime 里开终端更自然。
立即学习“Python免费学习笔记(深入)”;
- 装插件
Package Control → Install Package → Terminus,然后Ctrl+Shift+P → Terminus: Open Default Shell in Panel - 在面板里手动输
python3 script.py,支持input()、Ctrl+C 中断、自动补全路径 - 如果只是偶尔用,用系统终端也行:右键文件 →
Open Containing Folder,再手动打开终端 cd 进去——比折腾构建系统快得多
Sublime 配 Python 的核心就两件事:让 Ctrl+B 找到对的 python 解释器,并让它用对的编码吐出文字。其余都是围绕这两点打补丁。很多人卡在“为什么我写了 print('你好') 却显示乱码”,其实问题不在 Python,而在 Sublime 怎么解码那一行字节流。










