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

Running an IPython/Jupyter notebook non-interactively

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

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

示例命令:

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


是的,它是可能的,而且很容易,它(大部分)将在2.0的IPython核心中,我建议现在查看这些示例。

[编辑]

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

它现在在Jupyter NbConvert。 NbConvert带有一堆默认禁用的Preprocessor,其中两个(ClearOutputPreprocessorExecutePreprocessor)是有意义的。您可以通过c..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

如果设置--profile=,这(当然)通过生成内核与非python内核一起工作。转换可能非常长,因为它需要重新运行笔记本电脑。您可以使用--to=notebook选项进行笔记本到笔记本的转换。

根据用例,可能需要设置/取消设置各种其他选项(超时,允许错误......)。有关详细信息,请参阅文档以及jupyter nbconvert --help--help-all或nbconvert在线文档。


在此功能成为核心的一部分之前,我整理了一个可以满足您需求的命令行应用程序。它被称为runipy,你可以用pip install runipy安装它。源代码和自述文件位于github上。


要覆盖并行工作程序或输入参数等某些功能,可以安装jupyter-runner

1
pip install jupyter-runner

关于github的自述文件:https://github.com/omar-masmoudi/jupyter-runner


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

1
ipython notebook --pylab inline

这将以非交互模式启动服务器,所有输出都打印在代码下方。然后,您可以保存.ipynb文件,其中包括Code&输出。