我可以在命令行中运行Jupyter notebook单元格吗?

80

我正在部署一个 Python 包,我想运行一个简单的测试以查看笔记本中的所有单元格是否都能够无错误地运行。由于在虚拟环境中运行笔记本存在问题,所以我希望通过命令行进行测试。有没有一种简单的命令行方式可以测试这个?


注意:该问题已被标记为如何从终端运行 .ipynb Jupyter Notebook的重复问题。但是,该问题是在那个问题之前发布的 (于 2016 年 2 月 18 日 2:49 提交),而那个问题是在几天后发布的(于 2016 年 2 月 22 日 3:35 提交)。最多只能将那篇文章标记为重复,并且如果被认定为重复,则应采取适当的措施合并这两个问题,并保持本问题作为主线

然而,这些问题可能不是重复的(另一个作者的意图不明确)。无论如何,这个问题及其回答特别涉及在终端内执行 Jupyter 笔记本中的单元格,而不仅仅是将笔记本转换为 Python 文件。


可能是如何从终端运行.ipynb Jupyter笔记本?的重复问题。 - Ciro Santilli OurBigBook.com
如果使用pytest,nbsmoke是一个插件,声称可以实现这一点。 - pylang
4个回答

132

nbconvert(一个用于笔记本转换的Jupyter工具)允许您在不使用任何额外软件包的情况下完成此操作:

只需打开终端并输入以下命令:

$ jupyter nbconvert --to notebook --inplace --execute mynotebook.ipynb

源代码

(感谢Stephan提出的--inplace标志)

注意:尽管如此,我建议将所有需要的内容转换为适当的脚本。Jupyter笔记本主要用于探索和共享结果,并不能完全取代传统程序。


20
您也可以使用--inplace标志: jupyter nbconvert --to notebook --execute --inplace mynotebook.ipynb (注:该命令将直接在原始文件中执行Jupyter笔记本并保存结果,而不会创建新的输出文件。) - Stephan Schielke
27
如果任何单元格运行时间超过30秒,Nbconvert将失败,您可能需要添加--ExecutePreprocessor.timeout=600 - bckygldstn
4
文档或关于以编程方式运行Notebook 的信息可以在 https://nbconvert.readthedocs.io/en/latest/execute_api.html#module-nbconvert.preprocessors 找到。请注意,翻译过程中不得改变原意,且不提供额外的解释或信息。 - TomDotTom
1
@bckygldstn 有没有办法完全取消超时?还是我只需要设置一个非常高的值? - CGFoX
1
另一个有用的标志是 --ExecutePreprocessor.kernel_name=julia-1.6,或者您需要的任何内核。 - M. Thompson
显示剩余4条评论

44

你可以使用runipy来完成这个任务。

runipy会运行笔记本中的所有单元格。如果发生错误,该进程将停止。

$ pip install runipy

$ runipy MyNotebook.ipynb

还有命令可用于将输出文件保存为笔记本或html报告:

$ runipy MyNotebook.ipynb OutputNotebook.ipynb

$ runipy MyNotebook.ipynb --html report.html


12
这个回答是正确的,但在最新版本的Jupyter中被nbconvert命令所取代。 - meduz
将以下与编程相关的内容从英文翻译为中文。只返回翻译后的文本:或如下建议一样使用“papermill”。 - Sysanin

17
您还可以尝试使用papermill,它允许您从命令行执行笔记本,并传递参数:
例如:
$ papermill mynotebook.ipynb mynotebook_output.ipynb -p start "2017-11-01" -p end "2017-11-30"

您也可以在不传递任何参数的情况下运行它。


2
Papermill具有漂亮的控制台UI,可以显示执行状态和时间,因此如果您想要一些执行监视,我实际上建议使用它而不是nbconvert - M.Winkens
不以通常的方式执行。在执行过程中,笔记本中的打印语句不会像转换为.py并运行时那样输出到stdout。相反,您会得到一个全新的笔记本文件。?? - sh37211

0
你可以使用 nbconvertipynb 文件转换为 Python 脚本,然后运行它。

jupyter nbconvert --to python notebook.ipynb

python3 notebook.py


Jupytext 还可以将笔记本转换为脚本,并具有其他一些使其成为工具箱中不错的工具的能力。它也可以直接从命令行执行笔记本。 - Wayne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接