【问题标题】:Running an IPython/Jupyter notebook non-interactively以非交互方式运行 IPython/Jupyter 笔记本
【发布时间】:2013-07-28 03:21:33
【问题描述】:

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

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

示例命令:

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

【问题讨论】:

    标签: ipython jupyter-notebook


    【解决方案1】:

    还有一种方法是使用papermill,它有Command Line Interface

    使用示例:(需要指定输出路径,存储执行结果)

    papermill your_notebook.ipynb logs/yourlog.out.ipynb

    如果您愿意,您还可以为每个参数指定所需的参数:-p 标志:

    papermill your_notebook.ipynb logs/yourlog.out.ipynb -p env "prod" -p tests "e2e"

    另一个与造纸厂相关的回复 - https://stackoverflow.com/a/55458141/2957102

    【讨论】:

      【解决方案2】:

      要涵盖一些功能,例如并行工作器、输入参数、电子邮件发送或 S3 输入/输出...您可以安装 jupyter-runner

      pip install jupyter-runner
      

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          [编辑]

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

          现在在 Jupyter NbConvert 中。 NbConvert 带有一堆默认禁用的Preprocessors,其中两个(ClearOutputPreprocessorExecutePreprocessor)很有趣。您可以通过c.<PreprocessorName>.enabled=True(大写即python)在您的(本地|全局)配置文件中启用它们,或者在命令行上使用--ExecutePreprocessor.enabled=True 保持其余命令照常。

          --ExecutePreprocessor.enabled=True 具有方便的--execute 别名,可用于最新版本的 NbConvert。如果需要,它可以与--inplace 结合使用

          比如headless运行notebook后转为html:

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

          剥离输出后转换为 PDF

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

          如果您设置了--profile=<your fav profile>,这(当然)确实可以通过生成<insert-your-language-here> 内核来处理非python 内核。转换可以非常长,只要它需要重新运行笔记本。您可以使用 --to=notebook 选项进行笔记本到笔记本的转换。

          根据用例,可能需要设置/取消设置各种其他选项(超时、允许错误、...)。请参阅文档,当然还有 jupyter nbconvert --help--help-allnbconvert online documentation 了解更多信息。

          【讨论】:

          • 感谢您为我指明了正确的方向。由于没有发布确切的代码,我分叉了其中一个要点并添加了输出代码,以便以下内容将从命令行运行笔记本,就像所需的 $ ipnbdocttest.py original.ipynb new.ipynb gist.github.com/davidshinn/6110231
          • 不,不在 IPython 2 中,在 IPython 3 的路上
          • 现在好像是这样(Ipython 3.1.0):ipython nbconvert --to=html --execute RunMe.ipynb
          • @NoahR 试试--ExecutePreprocessor.timeout=-1ref
          • 最新的 jupyter (4.1.0) 确实允许以非交互方式运行笔记本 jupyter nbconvert --to notebook --execute --allow-errors notebook.ipynb 也许可以编辑答案
          【解决方案5】:

          在此功能成为核心的一部分之前,我会组装一个小命令行应用程序,它可以满足您的需求。它叫做 runipy,你可以用pip install runipy 安装它。 source and readme are on github

          【讨论】:

          • runipy 对我来说似乎不太好用:它不会更新 signature 字段,因此(嗯,我认为这是一个结果),我的 SVG 实际上都不是渲染:IPython 更喜欢显示普通的 __repr__ 文本渲染。
          【解决方案6】:

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

          ipython notebook --pylab inline
          

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

          【讨论】:

          • 感谢您的回复,但我一直在寻找更具体的解决方案,无需干预 Web 浏览器,也无需关闭内核和 Web 服务器。我将问题编辑得更具体。
          • 在这种情况下,我不知道如何进行。你打算定期这样做吗? iPython-Notebook 旨在在浏览器中交互使用,从命令行保存特定的 ipynb 文件对我来说似乎很奇怪。
          • 是的,如果可以的话,我打算经常这样做。这在数据源经常变化的情况下非常有用,我希望看到使用 pandas 与它生成的代码交错的诊断输出,这正是 ipython notebook 做得很好。但是,如果我一天要运行许多此类进程,最好将它们批量运行,然后我可以稍后查看输出,就好像生成了日志文件一样。标准日志的问题在于很难看到代码和输出相互交错。
          • 这对我来说似乎是一个非常有用的用例。您可以拿一个模板笔记本,对其进行一些参数化,然后获得一个可打印的完全执行的解决方案,所有这些都无需接触浏览器。
          猜你喜欢
          • 2017-03-22
          • 2020-08-24
          • 2016-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多