零食-Jupyter实验室笔记本找不到内核



当使用R或python在jupyter实验室笔记本电脑中编写程序时,我将特定的conda环境安装为内核,以从基本conda环境中的单个jupyter实验室安装访问该环境特定的包

在完成笔记本电脑的开发后,我想把它插入我的snakemake文件中,以确保以后的再现性。当然,我用相应的conda-environment.yaml文件来完成这项工作,这样就可以提供所有需要的包/库。

现在问题来了:引用笔记本的规则在另一台机器/环境上是不可复制的,因为它试图访问/运行特定于我的开发环境的内核

有人能解决这个特殊问题吗?

编辑:导致我的问题的更详细步骤

  1. 为特定工具或任务设置conda环境(matplotlib _env((此处:matplotlab(
conda create -n matplotlib_env python=3.8 ipykernel matplotlib nbconvert
  1. 我创建了一个ipython内核,这样我的jupyter实验室实例从基本环境可以访问conda环境和相应的包(matplotlib(
python -m ipykernel install --user --name matplotlib_env --display-name "Python_maplotlib"
  1. 我创建了一个简短的笔记本(1(,它使用步骤2中配置的内核(Pyhton_matplotlib 2(
import matplotlib.pyplot as plt
plt.plot([1,2,3],[1,4,9])
plt.savefig('exp.png')
  1. 完成任务后,出于管理和再现性的原因,我想将其插入到我的蛇制造工作流程中。为此,我定义了一个规则,分别使用笔记本和conda-environment.yaml文件(通过:conda env export > matplotlib_env.yaml自动生成(
rule make_plot:
output:
"exp.png"
conda:
"matplotlib_env.yaml"
notebook:
"make_plot.ipynb"
  1. 只要原始conda环境(带有配置的内核(仍然存在,执行规则就可以正常工作。一旦我删除了原始的conda环境(也可以从kernelspec列表中删除内核(,我就会收到一条错误消息,因为再也找不到内核了,而且snakemakegenerated的conda环境不拥有笔记本正在寻找的内核
snakemake -p --cores 1 --use-conda make_plot

删除原始环境后的错误消息

[NbConvertApp] ERROR | Failed to run command:
...
FileNotFoundError: [Errno 2] No such file or directory: '/home/miniconda3/envs/matplotlib_env/bin/python'

从内核列表中删除内核后出现错误消息

...
raise NoSuchKernel(kernel_name)
jupyter_client.kernelspec.NoSuchKernel: No such kernel named matplotlib_env

我找到了一个解决方法:在保存笔记本之前,最后一次将内核切换到基本环境中的默认python或R内核。它们在安装后总是具有相同的默认名称(例如"Python 3"(。因此,当通过snakemake执行时,笔记本会查找默认的Python/R内核,并找到通过snakemake-use conda选项提供的新安装。

这不是最优雅的版本,但如果你需要/想将笔记本电脑插入你的工作流程,它就足够了。

最严格的是,一旦完成,将笔记本变成一个具有明确定义的输入和输出的脚本。然后通过相应的规则将该脚本插入到snake文件中,而不是笔记本。

最新更新