CodeBuddy 终端无法自动激活 Python 虚拟环境?一个配置解决(附完整排查过程)
同一个项目,在 VSCode 里打开终端,(.venv) 前缀会正常出现;换成 CodeBuddy,终端却干干净净,python 指向的还是全局解释器。明明已经通过"Python: 选择解释器"选好了环境,日志也确认读取到了 .\server\.venv\Scripts\python.exe,虚拟环境却始终没有自动激活。如果你也遇到了这个问题,这篇文章就从日志开始排查,看看根因在哪里,以及如何用一个配置修复。
问题现象
先说环境:Windows 11,CodeBuddy CN 1.106.1;Python 扩展套件为 ms-python.python 2026.4.0 和 ms-python.vscode-python-envs 1.20.1,均通过 open-vsx 安装。项目的虚拟环境位于 server/.venv,解释器选择正常,但新建集成终端时不会自动激活。同一个项目在 VSCode 和 Trae 里都没有这个问题。
排查第一步:查看窗口日志中的报错
打开"输出"面板,切换到"窗口"日志,可以看到一条关键错误:
Extension 'ms-python.vscode-python-envs' appears in product.json but enables LESS API proposals than the extension wants.
package.json (LOSES): terminalShellEnv, terminalDataWriteEvent
product.json (WINS): terminalShellEnv
简单来说,vscode-python-envs 扩展声明需要两个实验性 API:terminalShellEnv 和 terminalDataWriteEvent,但 CodeBuddy 安装目录下的 product.json 只授权了前者。那 terminalDataWriteEvent 又有什么用?查看扩展源码后可以发现,它的终端环境激活功能依赖 window.onDidWriteTerminalData 这个 API,对应的正是未获授权的那项提案。
再看扩展宿主日志,还能发现一连串报错:
Tool "get_python_environment_details" was not contributed.
Tool "selectEnvironment" was not contributed.
...
这些工具本应由 vscode-python-envs 注册。日志中的报错表明,这个扩展没有成功激活。
为什么降级扩展也没用
我最先想到的是降级:找一个不依赖 terminalDataWriteEvent 的旧版本装上。我装了 1.8.0,但终端还是没有激活。
我翻了 CodeBuddy 写在磁盘上的日志(%APPDATA%\CodeBuddy CN\logs\ 下对应时间戳目录里的 exthost.log),这才发现真正的问题:整个会话期间,ms-python.vscode-python-envs 从未激活过,日志里一条激活记录都没有。
原因有两个。第一,这个扩展只注册了 onLanguage:python 这一个激活事件。也就是说,编辑器里必须打开过 .py 文件,它才会激活;但日志里从未触发这个事件。第二,CodeBuddy 会自动更新这个扩展(窗口日志里能看到 Auto updating outdated extensions. ms-python.vscode-python-envs),所以降级后的版本会被悄悄升回去。
根因:主扩展在等一个无法工作的扩展
最关键的线索藏在 ms-python.python 的代码里。它内部有一个 shouldEnvExtHandleActivation() 函数:
shouldEnvExtHandleActivation = function() {
if (!isEnvExtensionInstalled()) return false;
const e = getConfiguration("python").inspect("useEnvironmentsExtension");
if (e?.globalValue === false || e?.workspaceValue === false) return false;
...
}
新版 Python 扩展的分工是这样的:只要检测到 vscode-python-envs 已安装,且 python.useEnvironmentsExtension 没有设为 false,主扩展就会把终端激活交给它。
于是,CodeBuddy 里就卡住了:主扩展不再自行激活终端,而它等着的那个扩展,又因为缺少 API 授权无法激活。VSCode 和 Trae 没有这个问题,是因为它们内核的 product.json 授权完整。
解决方案:改一个配置
打开CodeBuddy IDE,点击文件菜单、首选项、设置,分别搜索useEnvironmentsExtension、activateEnvironment,第一个取消打勾,第二个勾上即可。


也可以直接修改 CodeBuddy 的用户设置(%APPDATA%\CodeBuddy CN\User\settings.json)里加入:
"python.useEnvironmentsExtension": false,
"python.terminal.activateEnvironment": true,
"python.terminal.shellIntegration.enabled": true
第一行是关键。它会让 shouldEnvExtHandleActivation() 返回 false,主扩展随即改用内置的终端激活逻辑,通过 shell integration 注入 Activate.ps1。这条路径需要的 API,CodeBuddy 都已授权。配置只写在 CodeBuddy 里,不会影响同一台机器上的 VSCode 和 Trae。
重新加载窗口,打开一个 .py 文件,再新建终端。Python 扩展日志里出现下面这行,就说明配置生效了:
Send text to terminal: & e:/Project/超腾开源平台/server/.venv/Scripts/Activate.ps1
终端里的 (.venv) 前缀也会回来。这个方案不受 python-envs 扩展版本影响,安装最新版也不会互相干扰。
几点补充
- 启动时仍会出现
product.json报错,可以忽略;python-envs 已经被完全绕过。 - 根本原因是 CodeBuddy CN 的
product.json没跟上微软扩展的更新。可以向官方反馈,并附上报错和修复建议:给ms-python.vscode-python-envs补上terminalDataWriteEvent授权。官方修复后,删掉python.useEnvironmentsExtension: false,就能恢复新架构。 - 遇到扩展行为异常,别只看输出面板。
logs目录下的exthost.log往往更有用:哪些扩展激活了、由什么事件触发、有没有报错,都能从里面找到。
如果你也遇到过 CodeBuddy 的类似问题,欢迎在评论区交流排查思路。