VSCode插件更新后Python虚拟环境加载失败,主因是新版插件(v2026.8+)收紧了interpreter自动发现逻辑,不再递归扫描非标准命名目录(如.venv、pyenv子路径),需显式配置python.venvFolders;同时Jupyter内核校验更严格,要求kernel.json中argv[0]路径真实有效且spec_version为2。

VSCode 插件更新后 Python 虚拟环境加载失败,大概率不是环境坏了,而是插件(尤其是 Python、Pylance、Jupyter)在新版中改变了 interpreter 解析逻辑或缓存路径,导致它找不到你已有的 .venv 或 venv 目录。
为什么 update 后 Python: Select Interpreter 找不到你的虚拟环境
新版 Python 插件(v2026.8+)默认跳过非标准命名的环境目录,比如:.venv、env、pyenv 子目录下带版本号的路径(如 pyenv/versions/3.11.9/envs/myproj),除非显式配置扫描规则。旧版会递归扫描整个工作区,新版更严格、更依赖 python.defaultInterpreterPath 和 python.venvFolders 的显式声明。
- 检查是否被自动排除:打开命令面板 → 运行
Python: Show Output→ 切到Python面板,搜索Looking for interpreters in,看日志里实际扫描了哪些路径 - 确认你没误删
.vscode/settings.json里的python.defaultInterpreterPath字段——更新有时会重置该设置 - Windows 用户注意:路径中含空格或括号(如
C:UsersJohn Doemyproj.venv)时,新版插件可能因未加引号解析失败
python.venvFolders 必须显式列出非标准路径
如果你的虚拟环境不在项目根目录下,或用了自定义名(如 my_venv、py311-env),仅靠自动发现基本失效。必须手动告诉插件去哪里找:
- 打开工作区
.vscode/settings.json(不是全局 settings) - 添加这一项(支持 glob,但不支持嵌套通配符):
"python.venvFolders": ["./.venv", "./env", "../shared-venvs/*"]
- 注意:
../shared-venvs/*只匹配一级子目录,../shared-venvs/**无效 - 改完保存,然后执行
Developer: Reload Window,再试Python: Select Interpreter
插件更新后 pip list 显示空或报错 ModuleNotFoundError: No module named 'pip'
这不是 pip 没装,而是插件调用 interpreter 时没激活环境上下文——新版 Python 插件默认使用“裸解释器”启动语言服务器,不再自动注入 venv/bin/activate 行为。结果就是 sys.path 里没包,pip 命令也找不到。
- 临时修复:在终端里手动运行
source .venv/bin/activate(macOS/Linux)或.venvScriptsActivate.ps1(Windows PowerShell),再开一个新终端 tab,此时插件会继承该 shell 的环境 - 永久方案:在
.vscode/settings.json中加"python.terminal.launchArgs": ["-WorkingDirectory", "${workspaceFolder}", "-NoExit", "-Command", "source .venv/bin/activate"](Linux/macOS);Windows 用户用cmd.exe /k ".venv\Scripts\activate.bat" - 别信“Python: Restart Language Server”——它只重启服务,不重载环境变量或激活状态
更新后 Jupyter 内核列表为空或报 Failed to start the kernel
Jupyter 插件(v2026.7+)现在强制校验 kernel.json 中的 argv 路径是否指向真实存在的 Python 可执行文件。如果你用的是 pyenv、conda 或自建软链,而该路径在更新后被重写或失效(比如从 ~/.pyenv/versions/3.11.9/bin/python 变成 /Users/xxx/.pyenv/versions/3.11.9/bin/python),内核就直接被过滤掉。
- 运行
Jupyter: Configure Kernel,选Existing kernel specification,再手动指定.local/share/jupyter/kernels/myenv/kernel.json - 检查该文件中的
argv[0]是否可访问:ls -l $(cat kernel.json | jq -r '.argv[0]')
- 若用 conda,确保
conda activate myenv后运行python -m ipykernel install --user --name myenv --display-name "Python (myenv)"重注册 - 别复用旧版生成的 kernel —— 新版 Jupyter 插件会跳过不含
spec_version: 2的 kernel.json
最易被忽略的一点:插件更新后,python.defaultInterpreterPath 如果指向的是 symlink(比如 /usr/local/bin/python3),而该 symlink 在系统升级后指向了新版本(如从 3.11 → 3.12),但你的 requirements.txt 或 pyproject.toml 锁定了旧版依赖,就会出现“环境存在但包全报错”的假象——这时得先确认 interpreter 实际版本,再决定是换环境还是升级依赖。


















