Jupyter为何关联无关虚拟环境?如何切换至本地Conda环境?
问题分析与解决方法
核心原因拆解
首先得搞懂Jupyter的一个关键机制:Jupyter Server(提供网页服务的进程)和Kernel(执行代码的进程是完全分离的)。你在Conda Shell里启动的是Jupyter Server,它确实用的是你主目录的Conda环境,但Notebook里执行代码的Kernel,是看你选择了哪个已注册的Kernel配置——之前那个“无关虚拟环境”大概率是之前被安装了ipykernel并注册到Jupyter里了,所以哪怕Server用对了环境,代码还是跑在那个错误的Kernel里。
至于你提到的端口转发问题,其实和Kernel环境无关,它只是负责让你远程连接到Jupyter Server,不会影响代码执行的环境选择,属于混淆点。
而编辑2里删除环境后Kernel启动失败,是因为Jupyter的Kernel配置还残留着指向那个已删除环境的Python可执行文件路径,系统找不到对应文件,自然启动失败。
具体解决步骤
1. 先确认当前Jupyter的Kernel列表
先搞清楚到底有哪些Kernel被注册了,在你的Conda Shell里执行:
jupyter kernelspec list
你会看到类似这样的输出,里面应该能找到那个“无关虚拟环境”对应的条目:
Available kernels: your_env_name ~/.local/share/jupyter/kernels/your_env_name wrong_env ~/.local/share/jupyter/kernels/wrong_env
2. 方案一:给你的目标Conda环境注册专属Kernel(推荐)
这是最稳妥的方法,确保你能随时切换到正确的环境:
- 先激活你的主目录Conda环境(如果是base环境可以跳过激活):
conda activate your_base_env - 安装
ipykernel(Jupyter Kernel的依赖):conda install ipykernel - 把这个环境注册为Jupyter可识别的Kernel:
这里的python -m ipykernel install --user --name your_base_env --display-name "Python (主目录Conda环境)"--display-name是给Notebook里显示的名字,你可以随便取个好认的。
之后打开Notebook时,点击右上角的Kernel选择器,选你刚注册的“Python (主目录Conda环境)”,再执行import sys; sys.executable,就会指向你的Conda环境路径了。
3. 方案二:删除错误的Kernel注册
如果你确定再也不用那个“无关虚拟环境”了,可以直接删掉它的Kernel配置:
- 用第一步的
jupyter kernelspec list找到错误Kernel的名字(比如叫wrong_env) - 执行删除命令:
之后Jupyter就不会再显示这个错误的Kernel了,默认会使用Jupyter Server所在的Conda环境的Kernel(前提是该环境已经装了jupyter kernelspec remove wrong_envipykernel)。
额外注意事项
- 在VS Code里,一定要注意Notebook右上角的Kernel选择,别选错了——有时候VS Code会自动选最近用过的Kernel,哪怕你换了Shell环境。
- 永远别把Jupyter Server和Kernel的环境混为一谈:Server只是帮你打开网页,真正跑代码的是Kernel,Kernel的环境完全看你选的配置。
内容的提问来源于stack exchange,提问作者HerpDerpington
相关产品推荐
相关产品推荐

