Trae 下安装 Pylance 插件(仅作为实验,版权由微软所有)_trae pylance
目录
- 背景
- 0. Trae 环境准备(可省略)
- 1. 从VSCode市场获取插件安装包
- 2. 直接安装插件至Trae会失败
- 3. 解压 vsix 文件
- 4. 直接移动安装
- 20250603更新
- 20250605更新
-
- 问题分析
- 不慎取消封禁
- 20250709更新
- 参考文献:
背景
基于 VSCode 改版但使用 Open VSX 的编辑器(如 trae、Cursor)会遇到以下限制1:
微软官方插件(Pylance/Remote SSH/C#工具链等)仅在 Microsoft Marketplace 分发,这些闭源插件不会同步到 Open VSX 仓库。Pylance 的智能补全、类型检查等高级功能将缺失。
官方建议的用 pyright
来代替2 3,但是 pyright
远不如 pylance,缺失后非常不方便。观察到官方文档4有如下图:
可以推测,其实 trae 可以装上 Pylance插件。经过实验,发现确实trae可以使用 pylance 的老版本。
免责声明:根据微软官方的声明,pylance 仅被授权于使用于 VS Code 中,其他使用均未被授权,本文的方法不得被用于任何侵犯微软版权的活动中。
0. Trae 环境准备(可省略)
主要思路是仿照在基于VS code 的开源软件 VSCodium 里安装 Pylance 插件5:
- 找到 trae 安装目录,如
F:\\Programs\\Trae\\resources\\app\\
- 修改
product.json
(可以先进行备份):
将其中的
\"extensionsGallery\": {\"serviceUrl\": \"https://open-vsx.org/vscode/gallery\",\"controlUrl\": \"https://lf3-static.bytednsdoc.com/obj/eden-cn/lkpkbvsj/ljhwZthlaukjlkulzlp/marketplace/controlUrl.json\",\"searchUrl\": \"https://open-vsx.org/vscode/gallery/extensionquery\"},
改为:
\"extensionsGallery\": {\"serviceUrl\": \"https://marketplace.visualstudio.com/_apis/public/gallery\",\"cacheUrl\": \"https://vscode.blob.core.windows.net/gallery/index\",\"itemUrl\": \"https://marketplace.visualstudio.com/items\"},
这里的作用是将插件更新的连接全部指向 VS Code官方的插件市场。
1. 从VSCode市场获取插件安装包
这里需要从VSCode市场手动获取安装包6:
- 访问VSCode插件市场,搜索目标插件(Pylance);
- 进入插件详情页,点击Version History查看历史版本;
- 从
https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance
中提取关键参数:- itemName字段拆分为:
fieldA=ms-python
,fieldB=vscode-pylance
- 选择兼容版本号 (如
2023.9.10
)
- itemName字段拆分为:
笔者得到的下载链接为(大概16M):
https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/vscode-pylance/2023.9.10/vspackage
2. 直接安装插件至Trae会失败
浏览器打开上述链接,会自动下载.vsix文件,得到 ms-python.vscode-pylance-2023.9.10.vsix
文件。
但是此时如果打开Trae,进入插件市场,然后拖拽下载的.vsix文件至插件面板安装,会报错:
即:
Installation failed
Currently, ms-python.vscode-pylance is not supported for installation
因此不能直接这样安装。注意,如果这种安装方式出现另一个错误:
End of central directory record signature not found. Either not a zip file, or file is truncated.
则说明文件没有下载完整,请重新下载。
3. 解压 vsix 文件
-
保持 Trae 打开,并在项目中任意打开一个python文件,左边栏停留在插件市场的界面。
-
将
ms-python.vscode-pylance-2023.9.10.vsix
文件 解压 提取到ms-python.vscode-pylance-2023.9.10
文件夹:
-
然后将
extension
文件夹里的所有文件复制到本目录下:
-
修改
package.json
,将\"displayName\": \"Pylance\"
改为\"displayName\": \"Pylance-trae\"
(避免Trae识别到pylance,不过新版中已失效)。 -
进入此时
dist
文件夹下,复制一个extension.bundle.js
作为部分,然后新建一个空白的extension.bundle.js
7:
4. 直接移动安装
- 还是保持 Trae 打开,并在项目中任意打开一个python文件,左边栏停留在插件市场的界面。
- 将
ms-python.vscode-pylance-2023.9.10
文件夹 移动至 trae 的插件目录C:\\Users\\你的用户名\\.trae\\extensions
:
- 此时会发现,已安装的插件里会自动更新出现 Pylance-trae 插件:
- trae 的插件目录
C:\\Users\\你的用户名\\.trae\\extensions
下的extensions.json
里面会自动多一项:
,{“identifier”:{“id”:“ms-python.vscode-pylance”},“version”:“2023.9.10”,“location”:{“$mid”:1,“fsPath”:“c:\\Users\\xxx\\.trae\\extensions\\ms-python.vscode-pylance-2023.9.10”,“_sep”:1,“external”:“file:///c%3A/Users/xxx/.trae/extensions/ms-python.vscode-pylance-2023.9.10”,“path”:“/c:/Users/xxx/.trae/extensions/ms-python.vscode-pylance-2023.9.10”,“scheme”:“file”},“relativeLocation”:“ms-python.vscode-pylance-2023.9.10”}
注意,这里在移动文件夹之后笔者的 trae 是自动更新到了插件。没有出现说明失败了。
- 最后重启 trae,即可享受
pylance
插件的丝滑。
20250603更新
trae 国际版进行了更新,变为了付费版,原来旧的 trae 版本下 pylance 等插件可以正常使用,但是内置的模型不再进行更新了,因此只能主动升级(不卸载直接用最新安装包安装)。 实测发现如果主动更新到当前最新版 1.4,pylance 等 publisher 为 ms-python
的插件将会被 trae 主动检测并变得不完全可用:只能跳转函数,无法识别(突出)未导入/定义的包、库或者变量。
官方推荐的替代是:BasedPyright 8。但是它只能实现函数定义跳转,依旧无法识别(突出)未导入/定义的包、库或者变量。
20250605更新
经过不懈努力,终于不慎解决了pylance在新版Trae的使用。前面的安装操作还是一样。
问题分析
检查Trae的output栏,进行如下设置
可以发现,当不慎强行启用pylance时,会出现
检测信息为:
[iCube] getExtension block: true, sourceExtension: ms-python.python(ms-python.python), targetExtensionId: ms-python.vscode-pylance
这是 Trae 官方新加的主动封禁功能。
不慎取消封禁
经过查找定位,在Trae软件的安装目录,找到 Trae\\resources\\app\\out\\vs\\workbench\\api\\node\\extensionHostProcess.js
将代码里的函数 function hq(e,t,i,r)
function hq(e,t,i,r){if(!e||!e.iCubeApp?.icubeExtensionControl)return!1;const s=Sm.findOne(e.iCubeApp.icubeExtensionControl,i);if(!s)return!1;const n=s.actions?.extHostBlockGetExtension;if(!n||!Array.isArray(n))return!1;for(const o of n){if(o.fromExtId===t.id)return r?.info(`[iCube] getExtension block: ${o.block}, sourceExtension: ${o.fromExtId}(${t.id}), targetExtensionId: ${i}`),o.block;if(o.fromExtId===\"*\")return r?.info(`[iCube] getExtension block: ${o.block}, sourceExtension: ${o.fromExtId}(${t.id}), targetExtensionId: ${i}`),o.block}return!1}
(修改前请备份)改为:
function hq(e, t, i, r){return false;}
然后找到 Trae\\resources\\app\\out\\vs\\workbench\\api\\worker\\extensionHostWorkerMain.js
将代码里的函数 function iO(e,t,i,r)
function iO(e,t,i,r){if(!e||!e.iCubeApp?.icubeExtensionControl)return!1;const s=ip.findOne(e.iCubeApp.icubeExtensionControl,i);if(!s)return!1;const n=s.actions?.extHostBlockGetExtension;if(!n||!Array.isArray(n))return!1;for(const o of n){if(o.fromExtId===t.id)return r?.info(`[iCube] getExtension block: ${o.block}, sourceExtension: ${o.fromExtId}(${t.id}), targetExtensionId: ${i}`),o.block;if(o.fromExtId===\"*\")return r?.info(`[iCube] getExtension block: ${o.block}, sourceExtension: ${o.fromExtId}(${t.id}), targetExtensionId: ${i}`),o.block}return!1}
(修改前请备份)改为:
function iO(e,t,i,r){return false;}
然后再重启IDE以及重新禁用启用pylance插件。
即使此时处于 Unavailable 的状态,依旧可以不慎正常使用pylance。
注意进行上述更改后,Trae 会提示:Your Trae installation appears to be corrupt. Please reinstall.
如上图所示,不过可以忽略。
经过上述不慎操作后,此时可以实现:
- 环境中没有的包或者工程中不存在的自定义函数下划线突出显示;
- 跳转函数定义;
- 未定义的变量下划线突出显示;
- 未使用的库一目了然。
20250709更新
发现pylance突然又失效了,但是实测把 C:\\Users\\xxx\\.trae\\extensions\\ms-python.vscode-pylance-2023.9.10
下的 package.json
里面 \"publisher\": \"ms-python\"
改成 \"publisher\": \"ms-python0\"
,重启Trae,然后再改回去(一定要再恢复),重启Trae,奇迹般地又好了。暂时不清楚为什么😂,可能Trae的检测具有时效性。
参考文献:
-
使用 trae、cursor 这些魔改版的 vscode 是不是无法使用微软第一方的插件 Pylance 了? ↩︎
-
对原 vs code 支持的插件不支持,如 Pylance 高亮代码 #185 ↩︎
-
Pylance not available #38 ↩︎
-
Trae官方文档管理插件 ↩︎
-
Solution to Pylance not working with VSCodium #1641 ↩︎
-
Trae如何导入VSCode插件?三种方法详解 ↩︎
-
VSCodium无法使用新版Pylance的解决方法 ↩︎
-
问题排查 ↩︎