Python插件更新后Pylance失效,因Pylance等依赖组件独立发布且不随主插件自动安装;需手动安装ms-python.pylance、ms-python.debugpy等对应版本,并重启Python文件触发激活。

插件更新后报错“找不到 pylance”“debugpy 未安装”或“language server failed to start”,不是插件坏了,而是 VSCode 更新主插件时没自动拉取/更新其依赖组件——这些组件(如 Pylance、debugpy、pyright)是独立发布的二进制服务,不随主插件打包,必须单独安装且版本对齐。
为什么更新 Python 插件后 Pylance 突然失效
VSCode 的 ms-python.python 插件本身不包含 Pylance 代码,只在 package.json 中声明 "extensionDependencies": ["ms-python.pylance"]。更新主插件时,VSCode 不会主动检查或安装依赖项,尤其当:
• 你之前手动禁用过 Pylance
• 网络受限导致依赖下载被跳过
• Pylance 自身有新版发布,但旧版与新 Python 插件不兼容
• 离线环境从未装过依赖,更新后更无从补全
此时右下角状态栏可能显示“Python Language Server: Pylance (not installed)”,或调试时提示 Cannot find module 'debugpy'。
手动补全依赖的可靠操作顺序
别依赖“重新加载窗口”或“重启 VSCode”——它们不触发依赖拉取。必须显式安装缺失组件:
- 打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P),运行Extensions: Install Extension - 搜索并安装以下关键依赖(按需):
•ms-python.pylance(必需,提供智能提示)
•ms-python.debugpy(必需,调试支持)
•ms-toolsai.jupyter(仅需 Notebook 支持时) - 安装完每个依赖后,**关闭所有 Python 文件标签页,再重新打开一个
.py文件**——这是触发onLanguage:python激活事件的最稳方式 - 观察右下角状态栏:从“Pylance (not installed)”变为“Pylance v2024.x.x”才算生效
离线环境必须预装的依赖清单
如果你在 Air-Gapped 网络中,不能指望更新后联网补救。每次升级主插件前,必须同步下载对应版本的依赖 VSIX 包。关键点:
-
Pylance和debugpy的版本号要与ms-python.python兼容:查其package.json或 GitHub Release 页面的compatibility字段(例如 Python 插件 v2024.6.0 要求 Pylance ≥ v2024.5.0) - 不要只下
.vsix,还要确认包内含out/或dist/目录(即已构建好),否则运行时报Cannot find module './extension' - Windows 下用命令行安装时,路径含空格必须加双引号:
code --install-extension "D:\vsix\ms-python.pylance-2024.5.0.vsix" - 安装后检查扩展目录:
~/.vscode/extensions/ms-python.pylance-2024.5.0/是否存在server/子目录(含pylance-linux-x64.node等二进制文件)
依赖装了但还是报错的隐藏原因
即使 Pylance 显示已启用,仍可能因以下细节失败:
-
python.languageServer设置被覆盖:检查settings.json是否硬编码为"python.languageServer": "Jedi",这会绕过 Pylance - 工作区设置了
"python.defaultInterpreterPath",但该解释器所在虚拟环境里没装pyright(Pylance 底层依赖)——可手动运行./venv/bin/python -m pip install pyright - VSCode 启动时加载了多个 Python 工作区,其中一个的
settings.json禁用了python.languageServer,影响全局行为 - Linux/macOS 上 SELinux 或 AppArmor 限制了
server/下二进制文件执行权限(少见但真实存在,报错含Permission denied)
最易忽略的是:依赖组件(如 debugpy)的进程实际由 Python 解释器启动,它读取的是 python.defaultInterpreterPath 对应环境里的包,不是 VSCode 自身的 node_modules。路径、权限、包存在性,三者缺一不可。


















