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,其中两个(ClearOutputPreprocessor和ExecutePreprocessor)是有意义的。您可以通过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在线文档。
-
谢谢你指点我正确的方向。由于没有发布确切的代码,我分叉了其中一个要点并添加了输出代码,以便以下内容将从命令行运行一个笔记本,就像所需的$ ipnbdocttest.py original.ipynb new.ipynb gist.github.com/davidshinn/6110231
-
大!此功能将在nbconvert 2.0中添加更好的API,请不要犹豫,编辑wiki以添加脚本链接。
-
@Matt这是否进入了ipython 2?如果是这样,我该如何使用它?
-
不是在IPython 2中,在IPython 3的路上
-
这样的功能对于使笔记本电脑成为执行可重复分析的工具(例如将命令嵌入到makefile中,即从命令行运行笔记本,然后将其转换为markdown / rst)非常有趣。期待它!
-
它现在是主人。
-
大!我在大师里找不到它;你能指出如何调用这个功能吗?谢谢?
-
ipython nbconvert --to=html --ExecutePreprocessor.enabled=True RunMe.ipynb。将更新答案。
-
Matt,也许用ipython 3中的信息更新响应是否有意义?例如。它在ipython 2.4中无法正常工作(但在版本3中)
-
现在看来(Ipython 3.1.0):ipython nbconvert --to=html --execute RunMe.ipynb
-
关于边缘情况的警示:nbconvert似乎有一些超时功能,如果单元格的内容碰巧有超过5-10秒的代码执行,则会失败。 [NbConvertApp] ERROR | Timeout waiting for execute reply [NbConvertApp] ERROR | failed to run cell: Empty() [NbConvertApp] ERROR | !make all
-
@NoahR尝试--ExecutePreprocessor.timeout=-1参考
-
最新的jupyter(4.1.0)确实允许以非交互方式运行笔记本jupyter nbconvert --to notebook --execute --allow-errors notebook.ipynb也许可以编辑答案
-
在我的情况下,matplotlib数字丢失了。必须添加%matplotlib inline才能获得输出中的数字
在此功能成为核心的一部分之前,我整理了一个可以满足您需求的命令行应用程序。它被称为runipy,你可以用pip install runipy安装它。源代码和自述文件位于github上。
-
runipy很棒!
-
runipy似乎对我来说效果不好:它不会更新signature字段,因此(好吧,我认为这是一个结果),我的SVG实际上都没有呈现:IPython更喜欢显示平原而是__repr__文本渲染。
-
或conda install runipy如果使用anaconda。
要覆盖并行工作程序或输入参数等某些功能,可以安装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&输出。
-
感谢您的回复,但我正在寻找一个更具体的解决方案,不需要干预Web浏览器,也不需要关闭内核和Web服务器。我把这个问题编辑得更具体。
-
在这种情况下,我不知道如何继续。你打算定期这样做吗? iPython-Notebook旨在在浏览器中以交互方式使用,从命令行保存特定的ipynb-Files对我来说似乎很奇怪。
-
是的,我计划经常这样做,如果有的话。这在数据源经常变化的情况下非常有用,我希望看到使用pandas与它生成的代码交错的诊断输出,正是ipython notebook非常好。但是,如果我有很多这些类型的进程要运行一天,那么如果它们可以批处理运行会更好,然后我可以稍后查看输出,就好像生成了日志文件一样。标准日志记录的问题是很难看到代码和输出相互交错。
-
这对我来说似乎是一个非常有用的用例。您可以使用模板笔记本,稍微对其进行参数化,然后在不触及浏览器的情况下获得可打印的完全执行的解决方案。