在使用 R 或 python 在 jupyter lab notebook 中编写程序时,我将特定的 conda 环境安装为内核,以从基本 conda 环境中的单个 jupyter lab 安装访问特定于环境的包
在完成笔记本的开发后,我想将它插入我的蛇形文件以确保以后的可重复性,当然,我使用相应的 conda 环境 .yaml 文件来执行此操作,以便提供所有需要的包/库。
现在问题来了:引用笔记本的规则在另一台机器/环境上不可重现,因为它试图访问/运行特定于我的开发环境的内核
有没有人有这个特定问题的解决方法或解决方案?
编辑: 导致我的问题的更详细的步骤
- 为特定工具或任务(此处:matplotlib)设置 conda 环境(matplotlib_env)
conda create -n matplotlib_env python=3.8 ipykernel matplotlib nbconvert
- 我创建了一个 ipython 内核,因此基础环境中的jupyter-lab 实例可以访问 conda 环境和相应的包(matplotlib)
python -m ipykernel install --user --name matplotlib_env --display-name "Python_maplotlib"
import matplotlib.pyplot as plt
plt.plot([1,2,3],[1,4,9])
plt.savefig('exp.png')
- 完成任务后,出于管理和可重复性的原因,我想将其插入我的蛇形工作流程。为此,我使用各自的 notebook 和 conda 环境 .yaml 文件定义了一个规则(通过:自动生成
conda env export > matplotlib_env.yaml
)。
rule make_plot:
output:
"exp.png"
conda:
"matplotlib_env.yaml"
notebook:
"make_plot.ipynb"
- 只要原始 conda 环境(带有配置的内核)仍然存在,执行规则就可以正常工作。一旦我删除了原始的 conda 环境(也可以从 kernelspec 列表中删除内核),我会收到一条错误消息,因为无法再找到内核并且 snakemake 生成的 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