conda环境下如何删除Jupyter中冗余的IPython内核?
我来帮你解决这个冗余内核的问题,这在搭配nb_conda和nb_conda_kernels使用conda环境时挺常见的,咱们分几步来处理:
首先,先明确当前所有注册的内核情况,执行以下命令列出所有内核:
jupyter kernelspec list
这个命令会输出每个内核的名称和对应的存储路径,你可以对照这个列表和你实际存在的3个conda环境(root(base)、aind-dl、py2env),找出那些冗余或提示不存在的条目。
一、处理nb_conda_kernels自动生成的冗余内核
nb_conda_kernels会自动扫描conda环境并生成对应的内核条目,但有时候环境已经被删除、路径变更,或者缓存没更新,就会残留旧的冗余内核。可以按以下步骤清理:
更新conda环境缓存
nb_conda依赖conda的环境索引缓存来生成内核列表,执行命令清理并更新缓存:conda clean --index-cache注意:如果想彻底清理所有conda缓存(包括未使用的安装包),可以改用
conda clean -a,但这个操作会删除所有未被当前环境使用的包文件,按需选择即可。配置nb_conda_kernels过滤规则(可选)
如果你想让nb_conda_kernels只检测你指定的3个环境,避免自动生成其他冗余内核,可以修改Jupyter配置文件。找到jupyter_notebook_config.py(通常在~/.jupyter/目录下,没有的话可以执行jupyter notebook --generate-config生成),添加以下配置:c.NbCondaKernels.env_filter = '^root$|^aind-dl$|^py2env$'这个规则会让nb_conda_kernels只匹配你列出的3个环境名称,其他环境不会被自动添加到内核列表中。
二、删除手动注册的冗余内核
如果有些冗余内核是之前手动通过ipython kernel install等方式注册的(不是nb_conda自动生成的),可以直接删除:
使用jupyter命令删除(推荐)
针对jupyter kernelspec list输出里的冗余内核名称,执行:jupyter kernelspec remove <冗余内核名称>比如如果有个叫
py3_old的冗余内核,就执行jupyter kernelspec remove py3_old,按终端提示确认删除即可。手动删除内核目录(命令失效时)
如果命令删除没效果,可以直接找到jupyter kernelspec list里显示的冗余内核路径,手动删除整个目录。比如路径是/usr/local/share/jupyter/kernels/py3_old,就执行:rm -rf /usr/local/share/jupyter/kernels/py3_old
三、验证修复效果
完成以上步骤后,重启Jupyter Notebook,再打开内核选择菜单,应该就只会显示你实际存在的3个conda环境对应的内核了。如果还有问题,可以再执行jupyter kernelspec list确认所有冗余条目都已被删除。
内容的提问来源于stack exchange,提问作者Y. Aakash

