有两种方法可以实现标题:
- 使用 conda 的 nb_conda_kernels 包。
- 将每个环境注册到 Jupyter。
方法一的优点是配置好 nb_conda_kernels 包以后,未来在 conda 配置新的虚拟环境,Jupyter 会自动检测到该环境。但缺点是该包只能在 conda 环境中使用,这意味着用户的 Jupyter 也必须在 conda 环境中安装。比如用户有 3 个虚拟环境,每次都要先激活其中的某个环境(一般是 base),再启动 Jupyter。
而方法二的优点是可以将 Jupyter 和 conda 环境完全分离。比如使用 windows 本地配置的 python 程序安装 Jupyter,然后将要用到的环境注册到 Jupyter(这一步一般在新建环境的时候完成,并不麻烦),然后未来便可以随时启动 Jupyter 了,无需每次都激活虚拟环境。
方法二还有一个优点,就是可以在任意目录直接右键「在终端打开」,Jupyter Notebook 本身不能直接切换工作目录,「在终端打开」后可以直接使用 Jupyter notebook 命令启动 Jupyter。若是使用方法一,每次启动终端后总是需要先激活 conda 环境,再启动 Jupyter,反而显得麻烦。
综上,推荐使用方法二。
将每个环境注册到 Jupyter
该操作只需要一行命令,所以建议每次新建虚拟环境时顺带做了:
python -m ipykernel install --user --name=[你的环境名] --display-name="[显示的名称]"
该命令需要在虚拟环境内运行,意思是用该conda环境的python
运行ipykernel
,安装内核的配置文件到 Jupyter上。[你的环境名]
必须是该虚拟环境的原名,而[显示的名称]
则是最终显示在 Jupyter 界面上的名字,可以自定义。
安装好配置文件后,可以用下面的命令查看:
jupyter kernelspec list
该命令要运行在 Jupyter 的环境,方法二是直接在本机上安装的 Jupyter,所以直接在默认终端中使用即可。命令结果如下:
python3 是本机的 python 内核,而 base 和 test 就是 conda 虚拟环境的内核。
访问路径可以看到,配置文件非常小,完全无伤大雅。
最终效果
无论用的是方法一还是方法二,最终效果都是下面这样:
在文件内部也可以随时切换,因为 Jupyter 和内核本身是解耦的。
另外,无论用的是方法一还是方法二,notebook 和 Jupyterlab 是共通的,只要 notebook 配置好了,Jupyterlab 可以直接用。
相关链接: