Лабораторный ноутбук Snakemake — Jupyter не находит ядро

#jupyter-notebook #jupyter-lab #snakemake #jupyter-kernel

#jupyter-notebook #jupyter-lab #snakemake #jupyter-ядро

Вопрос:

При написании программы в лабораторном ноутбуке jupyter с использованием R или python я устанавливаю определенные среды conda в качестве ядер для доступа к пакетам, специфичным для этой среды, из одной установки jupyter lab в базовой среде conda

После завершения разработки ноутбука я хочу подключить его к своему файлу snakemake, чтобы обеспечить последующую воспроизводимость, и, конечно, я делаю это с соответствующей средой conda .файл yaml, чтобы были предоставлены все необходимые пакеты / библиотеки.

Теперь возникает проблема: правило, которое ссылается на ноутбук, невозможно воспроизвести на другом компьютере / среде, поскольку оно пытается получить доступ / запустить ядро, специфичное для моей среды разработки

Есть ли у кого-нибудь обходной путь или решение этой конкретной проблемы?

РЕДАКТИРОВАТЬ: более подробные шаги, ведущие к моей проблеме

  1. Настройте среду conda (matplotlib_env) для определенного инструмента или задачи (здесь: matplotlib)
 conda create -n matplotlib_env python=3.8 ipykernel matplotlib nbconvert
 
  1. Я создал ядро ipython, чтобы мой экземпляр jupyter-lab из базовой среды мог получить доступ к среде 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. Завершив задачу, я хочу подключить ее к своему рабочему процессу snakemake по соображениям управления и воспроизводимости. Для этого я определяю правило с соответствующим ноутбуком и средой conda.файл yaml (автоматически генерируется с помощью: conda env export > matplotlib_env.yaml ) .
 rule make_plot:
    output:
        "exp.png"
    conda:
        "matplotlib_env.yaml"
    notebook:
        "make_plot.ipynb"
 
  1. Выполнение правила работает нормально, пока исходная среда conda (с настроенным ядром) все еще существует. Как только я удалю исходную среду conda (необязательно также ядро из списка спецификаций ядра) Я получаю сообщение об ошибке, поскольку ядро больше не может быть найдено, а среда conda, созданная snakemake, не обладает ядром, которое ищет ноутбук.
 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
 

Комментарии:

1. Вы работаете с --use-conda ? Можете ли вы опубликовать правило notebook и conda yaml? Я не использовал конкретную среду conda для правил notebook, но она должна работать.

2. Привет, спасибо за ответ и интерес! Да, я использую —use-conda. Я отредактировал исходное сообщение и добавил минимальный пример проблемы, с которой я столкнулся.

Ответ №1:

Я нашел обходной путь: перед последним сохранением вашего ноутбука переключите ядро на ядро python или R по умолчанию из вашей базовой среды. После установки они всегда имеют одно и то же имя по умолчанию (например, «Python 3»). Таким образом, при выполнении через snakemake notebook ищет ядро Python / R по умолчанию и находит новую установку, предоставленную с помощью опции snakemake —use-conda .

Это не самая элегантная версия, но если вам нужно / хотите подключить ноутбуки к вашему рабочему процессу, этого достаточно.

Наиболее строгим было бы превратить записную книжку, после ее завершения, в скрипт с четко определенными входными и выходными данными. Затем этот скрипт подключается к snakefile с помощью соответствующего правила вместо notebook.