
一、如何将虚拟环境添加到 Jupyter在实际开发中经常会遇到这样的情况Jupyter Notebook 安装在 base 环境中项目依赖安装在独立虚拟环境中例如base环境 │ └── jupyter notebook langchain环境 │ ├── python ├── langchain └── 其他依赖希望实现使用 base 环境中的 Jupyter但是运行 langchain 环境中的代码。1. 进入目标虚拟环境首先进入需要添加到 Jupyter 的环境conda activate langchain此时后续操作都会针对 langchain 环境。2. 安装 ipykernel执行pip install ipykernel作用让这个 Python 环境具备作为 Jupyter Kernel 的能力。3. 注册 Kernel执行python -m ipykernel install --user --name langchain --display-name Python(langchain)其中--name langchain表示 Kernel 的内部名称。--display-name Python(langchain)表示 Jupyter 界面中显示的名称。--user表示将 Kernel 配置写入当前用户的 Jupyter 配置目录。4. 查看是否注册成功执行jupyter kernelspec list如果出现Available kernels: python3 langchain说明注册成功。之后打开 NotebookKernel ↓ Python(langchain)即可使用该环境。二、为什么 Jupyter 在 base 环境却能使用其他环境这里需要理解 Jupyter 的运行机制。很多人的误解Jupyter安装在哪里 ↓ 只能使用哪里的Python实际上不是。Jupyter 本身不负责执行 Python 代码。它主要负责提供 Notebook 页面管理代码单元管理 Kernel真正执行代码的是 Kernel。整体结构浏览器 | | Jupyter Server | | Kernel | | Python解释器所以base 中的 Jupyter 只是管理端。真正运行代码的是被选择的 Kernel。三、ipykernel 注册到底做了什么执行python -m ipykernel install --user ...并不会复制整个虚拟环境。它主要生成一个 Kernel 配置文件。例如 WindowsC:\Users\用户名\AppData\Roaming\jupyter\kernels\langchain里面有kernel.json内容类似{ argv: [ D:\\anaconda3\\envs\\langchain\\python.exe, -m, ipykernel_launcher ], display_name: Python(langchain) }其中最重要的是D:\anaconda3\envs\langchain\python.exe它告诉 Jupyter当用户选择 Python(langchain) 时启动这个 Python。四、为什么 base 的 Jupyter 能找到这个环境因为注册时使用了--user它写入的是当前操作系统用户的 Jupyter 配置目录。例如C:\Users\用户名\AppData\Roaming\jupyter\kernels这个目录中保存有哪些 KernelKernel 名称启动命令对应 Python 路径当你启动(base) jupyter notebookJupyter 会扫描这些目录。发现kernels └── langchain └── kernel.json于是显示Python(langchain)五、Kernel 和虚拟环境的区别需要注意Kernel 不等于虚拟环境。二者关系虚拟环境 langchain ├── python.exe ├── numpy ├── torch └── langchain Kernel kernel.json 记录 使用哪个python 如何启动 显示什么名字可以理解为虚拟环境提供运行代码的实际环境Kernel告诉 Jupyter 如何连接这个环境关系Jupyter | | Kernel(ipykernel) | | Python虚拟环境 | | 第三方库六、进一步理解1. 一个虚拟环境可以有多个 Kernel例如同一个环境langchain环境 python.exe注册Kernel A Kernel B那么 Jupyter 中可能出现Python(实验A) Python(实验B)但是两个 Kernel 都可能指向langchain/python.exe所以一个环境可以对应多个 Kernel。2. 一个 Kernel 也不一定对应虚拟环境Kernel 可以指向系统 PythonC:\Python311\python.exe也可以指向conda 环境D:\anaconda3\envs\langchain\python.exe所以Kernel 本质是一个启动配置而不是一个完整运行环境。七、最终总结添加 Jupyter 环境的核心流程创建虚拟环境 ↓ 安装 ipykernel ↓ 注册 Kernel ↓ 生成 kernel.json 配置文件 ↓ Jupyter扫描配置 ↓ 选择对应 Kernel 执行代码核心思想虚拟环境负责提供 Python 解释器和依赖Kernel 负责连接 Jupyter 和这个 Python 环境。Jupyter 通过扫描 Kernel 配置文件找到并启动对应的 Python。因此Jupyter(base) | | Kernel(langchain) | | langchain虚拟环境这就是为什么一个安装在 base 环境的 Jupyter可以同时管理多个不同的 Python 环境。