VSCode Notebook 不读取 python.defaultInterpreter 配置,而是依赖 Jupyter 内核注册表;需通过内核选择器切换并确认 sys.executable 路径匹配目标环境,必要时运行 python -m ipykernel install 注册内核。

为什么 python.defaultInterpreter 在 Notebook 里不生效?
VSCode Notebook 的 Python 内核和普通 Python 文件用的不是同一套启动逻辑。即使你设置了 python.defaultInterpreter,Notebook 默认仍会尝试从已注册的 Jupyter 内核列表中选一个(比如 Python 3.11 (conda)),而不是直接读取该配置项。
真正起作用的是内核注册状态——VSCode 启动时扫描本地环境并生成内核列表,Notebook 下拉菜单里显示的每一项都对应一个 kernel.json 文件。你改配置,它不刷新内核列表;你换解释器路径,它也不自动重注册。
- 检查当前生效的内核:点击 Notebook 右上角内核名称(如
Python 3.11),看弹出列表中哪个被打了勾 - 手动触发内核刷新:
Ctrl+Shift+P→ 输入Python: Refresh Kernel List,再重启 Notebook 标签页 - 如果目标环境没出现,说明它没被 Jupyter 识别到:在该环境中运行
jupyter kernelspec install-self(旧版)或python -m ipykernel install --user --name myenv --display-name "Python (myenv)"
如何让 Notebook 使用 conda/virtualenv 中的包?
核心问题不是“能不能用”,而是“用的是哪个内核”。哪怕你在 VSCode 设置里指定了 con核路径,Notebook 仍可能加载系统 Python 的内核,导致 import torch 报错。
验证方式很简单:在 Notebook 第一个 cell 里运行:
立即学习“Python免费学习笔记(深入)”;
import sys; print(sys.executable)
输出路径必须和你期望的环境一致(比如 /miniconda3/envs/myproj/bin/python)。如果不是,说明内核没对上。
- 不要依赖“Python: Select Interpreter”命令来切换 Notebook 环境——它只影响普通 .py 文件
- 必须通过 Notebook 右上角内核选择器切换,并确认所选内核名称包含你环境的标识(如
(myenv)) - 若 conda 环境安装了
ipykernel但未注册,运行conda activate myenv && python -m ipykernel install --user --name myenv --display-name "Python (myenv)" - 卸载旧内核用:
jupyter kernelspec uninstall myenv
ModuleNotFoundError 出现在 Notebook 却不在终端里?
典型现象:你在终端激活了 myenv,pip list 能看到 fastai,但在 Notebook 里 import fastai 报错。这几乎 100% 是内核路径和当前 shell 环境不一致导致的。
Jupyter 内核启动时会固化 PYTHONPATH、sys.path 和环境变量快照,不会继承你 VSCode 终端里的 conda activate 状态。
- 最稳妥的做法:所有依赖都在目标环境中用
pip install或conda install显式安装,而不是靠PYTHONPATH注入 - 避免在 Notebook 里写
sys.path.append("../lib")—— 这容易在导出为脚本或分享时失效 - 如果必须动态加路径,优先用
pathlib.Path(__file__).parent.parent / "lib"替代相对字符串,更健壮
为什么修改了 settings.json 但 Notebook 还是用错内核?
VSCode Notebook 不读取 python.defaultInterpreter,也不读取工作区级的 python.defaultInterpreter。它只认内核注册表 + 当前打开文件夹的 .ipynb 关联上下文。
一个常见误操作:你在用户设置里改了 python.defaultInterpreter,以为整个 VSCode 都会跟着变——其实 Notebook 完全无视它。
- 工作区设置中的
python.defaultInterpreter对 Notebook 无效,别白费劲 - 真正要配的是
jupyter.kernelspecsPath(极少需要)或直接管理内核注册本身 - 多项目混用时,建议每个文件夹下放一个
.env文件,并确保对应内核已用--user --name xxx独立注册,避免命名冲突 - 内核名称重复会导致 Notebook 随机选一个——检查
jupyter kernelspec list输出,删掉冗余项


















