非交互式运行IPython / Jupyter笔记本


79

有谁知道是否可以从命令行非交互式地运行IPython / Jupyter笔记本,并将结果.ipynb文件与运行结果一起保存。如果还不可能,用phantomJS实施将有多难,要开启和关闭内核,要开启和关闭Web服务器的东西有多难?

更具体地说,假设我已经有一个笔记本,original.ipynb并且我想重新运行该笔记本中的所有单元,并将结果保存到一个新的笔记本中new.ipynb,但是在命令行上使用一个命令执行此操作,而无需在浏览器或关闭内核或Web服务器,并假设没有内核或Web服务器正在运行。

示例命令:

$ ipython notebook run original.ipynb --output=new.ipynb

Answers:


70

是的,有可能而且很容易,它将(大部分)放在IPython core for 2.0中,我建议现在看看这些例子

[编辑]

$ jupyter nbconvert --to notebook --execute original.ipynb --output=new.ipynb

现在在Jupyter NbConvert中。NbConvert附带了一堆Preprocessor默认情况下处于禁用状态的,其中两个(ClearOutputPreprocessorExecutePreprocessor)很有趣。您可以通过c.<PreprocessorName>.enabled=True(大写的python)在(本地|全局)配置文件中启用它们,也可以在命令行--ExecutePreprocessor.enabled=True中将其余命令照常启用。

--ExecutePreprocessor.enabled=True具有方便--execute,可以在最新版本NbConvert的所使用的别名。--inplace如果需要,可以将其与

例如,无头运行笔记本后转换为html:

$ jupyter nbconvert --to=html --execute RunMe.ipynb

剥离输出后转换为PDF

$ ipython nbconvert --to=pdf --ClearOutputPreprocessor.enabled=True RunMe.ipynb

<insert-your-language-here>如果设置了,这(当然)可以通过生成内核来与非Python内核一起使用--profile=<your fav profile>。转换可能真的很长,因为它需要重新运行笔记本。您可以使用该--to=notebook选项进行笔记本到笔记本的转换。

根据使用情况,可能需要设置/取消设置各种其他选项(超时,允许错误等)。请参阅文档,当然jupyter nbconvert --help,请参见--help-all,或nbconvert在线文档以获取更多信息。


1
谢谢您指出正确的方向。由于没有发布确切的代码,因此我分叉了一个要点,并添加了输出代码,以便以下命令可以像期望的$ ipnbdocttest.py original.ipynb new.ipynb 要点
davidshinn/

3
不,在IPython 2中不是在IPython 3的途中
Matt

7
看来现在是这样(Ipython 3.1.0): ipython nbconvert --to=html --execute RunMe.ipynb
patricksurry

5
@NoahR尝试--ExecutePreprocessor.timeout=-1 裁判
Lenna

5
最新的jupyter(4.1.0)确实允许非交互式运行笔记本,jupyter nbconvert --to notebook --execute --allow-errors notebook.ipynb也许答案可以编辑
mgalardini

20

在此功能成为核心的一部分之前,我组装了一个小的命令行应用程序,它可以完成您想要的操作。它称为runipy,您可以使用安装它pip install runipy。该源和自述是在GitHub上


runipy似乎对我不太有效:它不会更新signature字段,结果(实际上,我认为这是结果),实际上我的SVG均未渲染:IPython倾向于显示纯__repr__文本渲染。
akim 2014年

1

运行并替换原始的.ipunb文件:

jupyter nbconvert --ExecutePreprocessor.timeout=-1 --to notebook --inplace --execute original.ipynb


-5

您可以通过命令行运行iPython-Notebook-server:

ipython notebook --pylab inline

这将以非交互模式启动服务器,并且所有输出都打印在代码下方。然后,您可以保存包含代码和输出的.ipynb文件。


感谢您的答复,但是,我正在寻找一种更具体的解决方案,该解决方案不需要Web浏览器的干预,也不需要关闭内核和Web服务器。我对问题进行了更具体的编辑。
davidshinn

在这种情况下,我不知道如何进行。您打算定期执行此操作吗?iPython笔记本旨在在浏览器中交互使用,从命令行保存特定的ipynb文件对我来说似乎很奇怪。
2013年

是的,我计划经常这样做(如果有的话)。在数据源经常更改并且我希望看到使用熊猫和它生成的代码交织在一起的诊断输出时,这将非常有用,这正是ipython notebook的出色表现。但是,如果我每天要运行许多这类进程,那么最好将它们批量运行,然后再查看输出,就像生成日志文件一样。标准日志记录的问题在于,很难看到代码和输出相互交错。
davidshinn 2013年

4
对我来说,这似乎是一个非常有用的用例。您可以拿一个模板笔记本,对其进行一些参数化,然后获得可打印的,完全执行的解决方案,而无需触摸浏览器。
holdenweb 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.