根本原因是语言类插件首次激活时需离线下载language server(如pyright)或cli工具(如prettier),而.vsix仅含插件外壳,不含运行时依赖;必须在有网机器上完整触发下载并迁移整个扩展目录(含已下载的native二进制),且架构与系统须完全一致。

语言类插件(如ms-python.python、esbenp.prettier-vscode)离线安装后大概率「显示已安装但不工作」,根本原因不是插件本身没装上,而是它们首次激活时会自动下载 language server 或 CLI 工具(如pyright、prettier),这些组件默认走外网——离线环境下卡在状态栏“Downloading…”或输出面板报 Failed to fetch。
为什么拖进 VSCode 就算“装好了”,Python 还是不提示?
因为 .vsix 文件只是插件外壳,不包含运行时依赖。VSCode 安装过程只解压并注册插件元数据,不会预置二进制工具或语言服务器。
- 打开一个
.py文件后,ms-python.python才会尝试拉取pyright或python-language-server,此时离线就失败 - 插件列表里显示“已启用”,不代表语言功能就绪;必须检查输出面板 → 切换到
Python通道,看有没有spawn ENOENT或fetch类错误 - 别信“安装完成自动生效”——这类插件往往需要重启 VSCode + 重新打开文件类型才能触发初始化流程
离线部署语言插件的正确顺序:先跑通再拷贝
不能只传 .vsix,必须把整个扩展目录(含已下载的 native 二进制)一起迁移。
- 在有网机器上:安装
.vsix→ 打开一个.py文件 → 等状态栏变绿 / 输出面板不再滚动 → 关闭 VSCode - 找到扩展目录:
Windows:%USERPROFILE%\.vscode\extensions\ms-python.python-2024.6.0
macOS:$HOME/Library/Application Support/Code/extensions/ms-python.python-2024.6.0
Linux:$HOME/.vscode/extensions/ms-python.python-2024.6.0 - 确认该目录下存在
node_modules和类似out/client/.../pyright的子路径(说明下载已完成) - 整目录拷到内网机对应位置,**不要只拷
.vsix,也不要只拷package.json**
怎么验证 pyright、prettier 这些东西真离线可用?
光看插件列表和命令面板能调出是不够的,得测真实行为。
- 打开命令面板(
Ctrl+Shift+P),输入Python: Show Output,切换到Python面板,应无红色错误,且能看到类似Starting Microsoft Python Language Server的日志 - 对一个
.py文件按Ctrl+Space,应弹出补全建议(不是“no suggestions”) - 右键 →
Format Document,如果用的是 Prettier,应成功格式化,而不是报prettier is not installed - 终端执行
ls -l ~/.vscode/extensions/*/out/**/pyright(Linux/macOS)或dir %USERPROFILE%\.vscode\extensions\*pyright*(Windows),确认可执行文件存在
最容易被忽略的一点:语言插件的 native 二进制(比如 pyright 的 .exe 或 .bin)是平台绑定的。ARM Mac 上装 x64 编译的 pyright 会静默失败,连错误都不报——必须确保有网机器和内网机器的架构(x64 / arm64)和系统(Windows/macOS/Linux)完全一致。











