最近在使用jupyter notebook的过程中,总是对一个问题感到疑惑:当前的代码跑在哪个环境下啊? 接下来我一步一步来记录下,我是如何确定的,大家一起讨论下吧。
首先我先创建一个虚拟环境
conda create -n langchain_learn python=3.10
我创建了一个名为langchain_learn的虚拟环境,专门用来学习langchain。创建完毕后控制台会提示,创建成功,你可以选择激活这个环境
激活环境
可以先执行
conda env list
来看一下目前创建的所有虚拟环境。
然后执行 如下命令 来激活langchain_learn环境
conda activate langchain_learn
查看当前环境的安装的包
激活环境之后,执行conda list 可以列出目前环境的所有包,我们发现默认新建的环境并没有jupyter notebook
不过没有关系 我们的全局环境是安装了jupyter的。依旧可以使用jupyter来创建notebook。但是在创建笔记之前,我们要了解一个内核的概念
jupyter 内核
那么啥是内核呢?说人话就是如果你在笔记里的cell中写的代码要能够执行,就需要一个内核,它是用来负责真正执行代码的。
打比方来说:
如果你的内核使用的 Python 环境里没有安装 pandas,那你运行 import pandas 就会报错,即使另一个环境有也不行。
那么内核和虚拟环境的关系
- 你注册的每一个内核都绑定到某个特定的 Python 环境(可以是 conda 环境、venv 虚拟环境、系统 Python 等)。
如何注册内核呢
是你(用户)把一个 Python 环境「注册」为 Jupyter 的一个内核。
你基于一个已有的 Python 环境,创建了一个 Jupyter 内核(即一组配置文件),让 Jupyter 知道:‘哦,我可以在需要时启动这个环境来运行代码’。
注册命令如下:
python -m ipykernel install --name langchain_learn --display-name "Python (langchain_learn)"
但是前提是你需要先安装 ipykernel 否则会报错
conda install ipykernel
(F:\anaconda_env\langchain_learn) F:\jupyter_notebook>python -m ipykernel install --name langchain_learn --display-name "Python (langchain_learn)"
Installed kernelspec langchain_learn in F:\anaconda_env\langchain_learn\share\jupyter\kernels\langchain_learn
查看当前jupyter支持的内核列表
jupyter kernelspec list
所以内核就是一个配置文件:
打开kernel.json 发现它指向的是你那个 conda 环境中的 python
总结:
如果用虚拟环境中的 Jupyter 启动,默认使用的是启动 Jupyter 的那个 Python 环境,但也可以通过 kernel 切换到其他环境。
默认行为:
情况1:直接用虚拟环境的 Jupyter 启动
# 激活虚拟环境
conda activate langchain_learn
# 启动 jupyter
jupyter notebook
默认使用的 Python 环境:
- 启动它的虚拟环境的 Python
- 即:F:\anaconda_env\langchain_learn\python.exe
- 这是默认的 kernel(python3)
情况2:Kernel 的选择
Jupyter 实际上是通过 kernel 来决定使用哪个 Python 环境:
# 查看可用的 kernels
jupyter kernelspec list
你看到的:
python3 F:\anaconda_env\langchain_learn\share\jupyter\kernels\python3
这个 python3 kernel 的配置指向的就是虚拟环境的 Python。