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

以非交互方式运行IPython/Jupyter笔记本,ipython,jupyter-notebook,Ipython,Jupyter Notebook,是否有人知道是否可以从命令行以非交互方式运行IPython/Jupyter笔记本,并将生成的.ipynb文件与运行结果一起保存。如果这还不可能,那么使用phantomJS实现、打开和关闭内核以及打开和关闭web服务器会有多困难 更具体地说,假设我已经有一个笔记本original.ipynb,我想重新运行该笔记本中的所有单元格,并将结果保存在一个新笔记本new.ipynb,但只需在命令行上执行一个命令,而无需在浏览器中交互或关闭内核或web服务器,假设没有内核或web服务器正在运行 命令示例: $

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

更具体地说,假设我已经有一个笔记本
original.ipynb
,我想重新运行该笔记本中的所有单元格,并将结果保存在一个新笔记本
new.ipynb
,但只需在命令行上执行一个命令,而无需在浏览器中交互或关闭内核或web服务器,假设没有内核或web服务器正在运行

命令示例:


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

您可以通过命令行运行ipython notebook服务器:

ipython notebook --pylab inline

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

是的,这是可能的,而且很简单,它(大部分)将位于IPython core for 2.0中,我建议现在查看一下

[编辑]

$ jupyter nbconvert --to notebook --execute original.ipynb --output=new.ipynb
它现在在朱皮特-NbConvert。NbConvert附带了一系列默认禁用的
预处理器
,其中两个(
ClearOutputPreprocessor
ExecuteProcessor
)是值得关注的。您可以通过
c..enabled=True
(大写为python)在(本地|全局)配置文件中启用它们,或者在命令行上使用
--executeprocessor.enabled=True
将命令的其余部分照常保留

--executeProcessor.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
,或了解更多信息。

在该功能成为核心功能的一部分之前,我开发了一个小的命令行应用程序,可以满足您的需求。它名为runipy,您可以使用
pip install runipy
安装它。.p>介绍一些功能,如并行工作程序、输入参数、电子邮件发送或S3输入/输出。。。您可以安装jupyter runner

pip install jupyter-runner

github上的自述文件:

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

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

还有一种方法是使用
造纸机
,它有

用法示例:(您需要为要存储的执行结果指定输出路径)

paperill your_notebook.ipynb logs/yourlog.out.ipynb

如果希望为每个参数指定
-p
标志,也可以指定所需的参数:

paperill your_notebook.ipynb logs/yourlog.out.ipynb-p env“prod”-p tests“e2e”


还有一个与Paperill回复相关的问题-

感谢您的回复,但是我正在寻找一个更具体的解决方案,它不需要干预web浏览器,也不需要关闭内核和web服务器。我将问题编辑得更具体一些。在这种情况下,我不知道如何继续。你是否计划定期这样做?iPython笔记本设计用于在浏览器中交互使用,从命令行保存特定的ipynb文件对我来说很奇怪。是的,我计划经常这样做,如果它可用的话。在数据源经常更改的情况下,它将非常有用,我希望看到使用pandas时的诊断输出与它生成的代码交织在一起,这正是ipython笔记本做得很好的地方。但是,如果我一天要运行许多这类进程,最好是批处理运行,然后我可以稍后查看输出,就像生成了日志文件一样。标准日志记录的问题是很难看到代码和输出彼此交错,这对我来说似乎是一个非常有用的用例。你可以拿一个模板笔记本,对它进行一点参数化,然后得到一个可打印的完全执行的解决方案,所有这些都不用接触浏览器。谢谢你为我指明了正确的方向。由于没有发布确切的代码,我分叉了其中一个GIST并添加了输出代码,这样下面的代码就可以从命令行运行一个笔记本,就像所需的
$ipnbdoctest.py original.ipynb new.ipynb
不在IPython 2中,在IPython 3的路上现在看起来是这样(IPython 3.1.0):
ipython nbconvert--to=html--execute RunMe.ipynb
@NoahR Try
--executeprocessor.timeout=-1
最新版本(4.1.0)确实允许以非交互方式运行笔记本电脑
jupyter nbconvert--to notebook--execute--allow errors notebook.ipynb
也许答案可以编辑。unipy对我来说似乎不太好:它不会更新
签名
字段,因此(我认为这是一个结果),我的SVG中没有一个是实际呈现的:IPython更喜欢显示纯文本呈现。