#jupyter-notebook #jupyter-lab #snakemake #jupyter-kernel
#jupyter-notebook #jupyter-lab #snakemake #jupyter-ядро
Вопрос:
При написании программы в лабораторном ноутбуке jupyter с использованием R или python я устанавливаю определенные среды conda в качестве ядер для доступа к пакетам, специфичным для этой среды, из одной установки jupyter lab в базовой среде conda
После завершения разработки ноутбука я хочу подключить его к своему файлу snakemake, чтобы обеспечить последующую воспроизводимость, и, конечно, я делаю это с соответствующей средой conda .файл yaml, чтобы были предоставлены все необходимые пакеты / библиотеки.
Теперь возникает проблема: правило, которое ссылается на ноутбук, невозможно воспроизвести на другом компьютере / среде, поскольку оно пытается получить доступ / запустить ядро, специфичное для моей среды разработки
Есть ли у кого-нибудь обходной путь или решение этой конкретной проблемы?
РЕДАКТИРОВАТЬ: более подробные шаги, ведущие к моей проблеме
- Настройте среду conda (matplotlib_env) для определенного инструмента или задачи (здесь: matplotlib)
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"
- Я создал короткую записную книжку (1), в которой используется ядро, настроенное на шаге 2 (Pyhton_matplotlib 2)
import matplotlib.pyplot as plt
plt.plot([1,2,3],[1,4,9])
plt.savefig('exp.png')
- Завершив задачу, я хочу подключить ее к своему рабочему процессу snakemake по соображениям управления и воспроизводимости. Для этого я определяю правило с соответствующим ноутбуком и средой conda.файл yaml (автоматически генерируется с помощью:
conda env export > matplotlib_env.yaml
) .
rule make_plot:
output:
"exp.png"
conda:
"matplotlib_env.yaml"
notebook:
"make_plot.ipynb"
- Выполнение правила работает нормально, пока исходная среда 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.