如何从具有不同内核的笔记本上运行Jupyter笔记本?

2024-10-03 04:32:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个笔记本(Python)中运行Jupyter笔记本(R)。使用命令:

%run "DESeq2 Analysis.ipynb"

调用Noteook并运行它,但给出Python错误。正在调用的笔记本(DESeq2分析.ipynb)应该用R内核运行。目标2分析.ipynb当我独立运行R内核时,它运行得很好。出现的情况是,运行python3内核的调用笔记本正在调用DESeq2分析.ipynb尝试用python3内核而不是R内核运行代码。在

在使用%run命令时,有没有方法指定内核?在


Tags: 方法run代码命令目标错误情况笔记本
1条回答
网友
1楼 · 发布于 2024-10-03 04:32:27

从@Louise Daviesanswer到{a2}

I don't think you can use the %run magic command that way as it executes the file in the current kernel.

Nbconvert has an execution API that allows you to execute notebooks. So you could create a shell script that executes all your notebooks like so:

#!/bin/bash
jupyter nbconvert  to notebook  execute 1_py3.ipynb
jupyter nbconvert  to notebook  execute 2_py3.ipynb
jupyter nbconvert  to notebook  execute 3_py3.ipynb
jupyter nbconvert  to notebook  execute 4_R.ipynb

Since your notebooks require no shared state this should be fine. Alternatively, if you really wanna do it in a notebook, you use the execute Python API to call nbconvert from your notebook.

import nbformat
from nbconvert.preprocessors import ExecutePreprocessor

with open("1_py3.ipynb") as f1, open("2_py3.ipynb") as f2, open("3_py3.ipynb") as f3, open("4_R.ipynb") as f4:
    nb1 = nbformat.read(f1, as_version=4)
    nb2 = nbformat.read(f2, as_version=4)
    nb3 = nbformat.read(f3, as_version=4)
    nb4 = nbformat.read(f4, as_version=4)

ep_python = ExecutePreprocessor(timeout=600, kernel_name='python3')
#Use jupyter kernelspec list to find out what the kernel is called on your system
ep_R = ExecutePreprocessor(timeout=600, kernel_name='ir')

# path specifies which folder to execute the notebooks in, so set it to the one that you need so your file path references are correct
ep_python.preprocess(nb1, {'metadata': {'path': 'notebooks/'}})
ep_python.preprocess(nb2, {'metadata': {'path': 'notebooks/'}})
ep_python.preprocess(nb3, {'metadata': {'path': 'notebooks/'}})
ep_R.preprocess(nb4, {'metadata': {'path': 'notebooks/'}})

with open("1_py3.ipynb", "wt") as f1, open("2_py3.ipynb", "wt") as f2, open("3_py3.ipynb", "wt") as f3, open("4_R.ipynb", "wt") as f4:
    nbformat.write(nb1, f1)
    nbformat.write(nb2, f2)
    nbformat.write(nb3, f3)
    nbformat.write(nb4, f4)

Note that this is pretty much just the example copied from the nbconvert execute API docs: link

相关问题 更多 >