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

При написании программы в лабораторной записной книжке jupyter с использованием R или python я устанавливаю определенные среды conda в качестве ядер для доступа к этим пакетам, зависящим от среды, из одной лабораторной установки jupyter в базовой среде 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 для управления и воспроизводимости. Для этого я определяю правило с соответствующим файлом .yaml среды ноутбука и conda (автоматически сгенерированным через: conda env export > matplotlib_env.yaml).
rule make_plot:
    output:
        "exp.png"
    conda:
        "matplotlib_env.yaml"
    notebook:
        "make_plot.ipynb"
  1. Выполнение правила работает нормально, пока существует исходная среда conda (с настроенным ядром). Как только я удаляю исходную среду conda (необязательно также ядро ​​из списка kernelspec), я получаю сообщение об ошибке, так как ядро ​​больше не может быть найдено, а среда 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

Вы работаете с --use-conda? Можете ли вы опубликовать правило записной книжки и conda yaml? Я не использовал конкретную среду conda для правил записной книжки, но она должна работать.   —  person sreichl    schedule 23.11.2020

См. также:  Как отобразить ранее созданный график в записной книжке Jupyter?

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

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. sreichl

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

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

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

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: