Sublime Text构建系统需显式配置"env"字段注入PYTHONPATH绝对路径,或设"working_dir"为项目根目录;虚拟环境必须在"cmd"中指定其python.exe路径,且JSON须UTF-8无BOM、无注释、语法严格正确。

构建系统里没设 PYTHONPATH,import 就会失败
Sublime Text 默认不继承 shell 的 PYTHONPATH,也不自动把项目根目录加进模块搜索路径。你终端里能 import requests,但 Ctrl+B 一跑就报 ModuleNotFoundError: No module named 'requests',大概率是构建系统调用了全局 Python,却没告诉它去哪找你的包。
解决办法不是改系统环境变量,而是直接在 .sublime-build 文件里用 "env" 字段注入路径:
-
"env": {"PYTHONPATH": "C:/your/project/root"}—— Windows 下推荐用正斜杠或双反斜杠,避免转义问题 - 多个路径用分号隔开(Windows)或冒号(macOS/Linux),例如
"PYTHONPATH": "C:/proj/src;C:/proj/lib" - 路径必须是绝对路径;相对路径如
"./src"不生效 - 如果用了虚拟环境,优先填虚拟环境的
site-packages路径(比如C:/venv/Lib/site-packages),而不是项目目录
virtualenv 激活了,但 Sublime 还是找不到包
你在终端里 source venv/bin/activate 后能 import 成功,不代表 Sublime 也用了这个环境——它根本不会读你终端的激活状态。关键点只有一个:构建系统的 "cmd" 第一项,必须指向虚拟环境里的 python.exe(Windows)或 python(macOS/Linux)。
验证方法:
- 激活虚拟环境后,在终端运行
where python(Windows)或which python(macOS/Linux),拿到输出路径 - 把这个路径完整填进
"cmd"数组第一项,例如"C:/myproject/venv/Scripts/python.exe" - 删掉旧的
"env": {"PYTHONPATH": ...}—— 虚拟环境自己的site-packages已在 sys.path 里,额外加反而可能冲突
Pythonpath 和 working_dir 不一致导致导入失败
即使 PYTHONPATH 设对了,import 仍可能失败,因为 Python 解释器启动时的当前工作目录(working_dir)会影响相对导入和 __init__.py 发现逻辑。
在构建系统中显式指定 "working_dir":
- 设为项目根目录:
"working_dir": "$project_path"(仅当已打开项目时有效) - 设为文件所在目录:
"working_dir": "$file_path",适合单文件脚本 - 硬编码路径(慎用):
"working_dir": "C:/myproject",注意路径末尾不要加斜杠 - 如果项目有
src/目录结构且包都在里面,"working_dir"应设为src上一级,否则from src.utils import x会失败
JSON 格式错误让 env 配置完全失效
Sublime 对构建系统 JSON 的容错率极低。"env" 字段写错一个逗号、多一行注释、或编码带 BOM,整个配置就会被静默忽略——你以为加了 PYTHONPATH,其实它压根没加载。
检查要点:
- 文件必须保存为 UTF-8 无 BOM 编码(用 Sublime 自己另存,别用记事本)
- 不能有任何
//或/* */注释 -
"env"是顶层字段,和"cmd"、"selector"并列,不要嵌套错层 - Windows 路径里的反斜杠必须写成
\,或者统一用正斜杠/(Sublime 支持) - 保存后必须完全退出 Sublime(包括托盘进程),再重启,否则旧缓存还在
真正卡住的地方往往不是路径写得对不对,而是 Sublime 根本没读到你写的那行 "env"。先确认构建系统被正确加载(右下角状态栏显示名称),再查内容是否合法。











