必须手动配置语言服务器二进制路径、Python解释器路径和语法作用域三者,缺一不可;终端运行pyright --version或pylsp --version有输出才说明CLI可用,否则用which/where获取绝对路径并填入command字段,路径含空格需加双引号,且须确保Sublime能继承PATH或使用绝对路径。

Sublime Text 要让 LSP 真正支持 Python 后端开发(比如 Flask/Django 项目里跳转 app.route、补全 request.args.get、识别虚拟环境里的包),光装插件远远不够——必须手动配对语言服务器二进制路径、Python 解释器路径和语法作用域,三者错一个,import 就标红、跳转就失效。
怎么确认 pyright 或 pylsp 已装好且能被 Sublime 找到?
别信“npm install -g pyright”之后就完事了。Sublime 的 LSP 客户端不会帮你查 PATH,它只认绝对路径或 PATH 里直接可用的命令名。
- 终端里运行
pyright --version或pylsp --version,有输出才说明 CLI 可执行;如果报command not found,先检查 Node.js / Python 是否在系统 PATH 中 - macOS/Linux 用
which pyright,Windows 用where pylsp,拿到的路径必须是完整绝对路径,例如/Users/you/.local/bin/pylsp或C:/Users/you/AppData/Roaming/npm/pyright.cmd - 路径含空格(Windows 常见)必须整个用双引号包裹,比如
"C:/Users/My Name/AppData/Roaming/npm/pyright.cmd",否则启动时日志里会报spawn ENOENT - 别写成
["pyright", "--stdio"]—— 这在 Sublime 里大概率失败,除非你确定 pyright 在 PATH 且 Sublime 继承了该 PATH(GUI 应用常不继承 shell 的 PATH)
LSP-pyright 和 pylsp 配置的关键区别在哪?
两者都支持 Python,但底层逻辑不同:pyright 是微软出品的类型检查优先型服务器,强依赖 pythonPath;pylsp 是 Python 社区维护的通用型服务器,更适配 venv 自动发现,但默认不启用所有插件。
-
LSP-pyright配置里必须显式指定pythonPath,否则连requests这种基础包都标“unresolved”。推荐在项目根目录放.pyrightconfig.json,内容为:{"pythonVersion":"3.11","pythonPath":"./venv/bin/python"}(Linux/macOS)或{"pythonVersion":"3.11","pythonPath":"./venv/Scripts/python.exe"}(Windows) -
pylsp用户配置中要加"settings": {"pylsp.plugins.pydocstyle.enabled": true, "pylsp.plugins.pycodestyle.enabled": true}才能启用 lint;它的python.executable可通过pylsp --help查看是否支持,不支持就只能靠PYTHONPATH环境变量或项目级pyproject.toml指定解释器 - 二者不能共存于同一项目:LSP 插件只会启动一个匹配
scopes的服务器,冲突时以配置中第一个为准
为什么 .py 文件打开后 LSP 没反应?重点查这三处
状态栏没显示 “LSP”,悬停无提示,Ctrl+Click 跳转失败——不是插件坏了,而是匹配链断了。
立即学习“Python免费学习笔记(深入)”;
- 按
Ctrl+Alt+Shift+P(macOS 是Cmd+Alt+Shift+P)看当前文件 scope,必须是source.python;如果是source.python.django或source.python.flask,就得把scopes写成数组:["source.python", "source.python.django"] -
syntaxes必须是"Packages/Python/Python.sublime-syntax",不是旧版Python.tmLanguage;如果你装过 Anaconda 插件,它会覆盖原生语法,导致 LSP 不触发——临时禁用 Anaconda 再试 - 打开
Preferences → Package Settings → LSP → Toggle Log Panel,看日志里有没有spawned或stderr输出。出现ENOENT是路径问题,ImportError是 Python 环境问题,connection closed往往是--stdio参数漏了或写错成--tsserver这类无效参数
最易被忽略的点:Sublime Text 的 GUI 进程往往不加载 shell 的 PATH,尤其在 macOS 上用 Launchpad 启动时。即使 which pylsp 在终端里能返回路径,Sublime 仍可能找不到——唯一稳解是写死绝对路径,并确保该路径下二进制文件有执行权限(Linux/macOS)或后缀是 .cmd(Windows)。


















