Jupyter notebook 运行 打开所有单元格

Jupyter notebook run all cells on open

我有一个 Jupyter 笔记本,我正在尝试以某种方式对其进行设置,以便在打开笔记本时所有单元格都自动 运行。

此行为不同于包含小部件的笔记本的保存输出。当包含小部件的单元格为 运行 时,小部件似乎只为我呈现。考虑以下示例:

from IPython.display import display
from IPython.html.widgets import IntSlider

w = IntSlider()
display(w)

在执行单元格之前不会显示滑块。

这是否可以通过笔记本元数据或配置文件来完成?

编辑: https://try.jupyter.org/ 似乎在做这样的事情:请注意,当您打开页面并显示输出时,笔记本不是 运行ning打开时。

EDIT2: 添加示例。

我不相信这是可能的。

ipython 不会执行代码,除非它是 1) 故意的和 2) 受信任的。否则,您将 运行 遇到加载包含恶意代码的笔记本的情况。

您可以在此处查看 ipython 安全模型的详细信息:https://ipython.org/ipython-doc/dev/notebook/security.html。特别是关于笔记本打开时代码执行的部分:"The security problem we need to solve is that no code should execute just because a user has opened a notebook that they did not write"

虽然您可以在笔记本上设置显式信任,但我不确定这是否也允许自动执行代码。我还没有看到任何类似的东西,但也许我只是没有足够努力地寻找。我在别处看到自动代码执行不是核心 ipython 包中可用的东西。在此处检查此问题:https://github.com/ivanov/ipython-trainingwheels/issues/35

难以置信,我怀疑这不可能的另一个原因是 1) 自动代码执行将替换笔记本中当前保存的任何现有输出,这可能不理想,以及 2) 一些笔记本可能包含计算量大的复杂代码,您不希望每次打开笔记本时都运行宁。

  1. 将下面的代码片段粘贴到普通(代码)单元格中,
  2. 执行它(按 [Ctrl + Enter]),然后
  3. 保存 笔记本。

下次您(重新)加载它时, 所有单元格都将 运行 并且检查点将与其刷新的输出一起保存。

%%html
<script>
    // AUTORUN ALL CELLS ON NOTEBOOK-LOAD!
    require(
        ['base/js/namespace', 'jquery'], 
        function(jupyter, $) {
            $(jupyter.events).on("kernel_ready.Kernel", function () {
                console.log("Auto-running all cells-below...");
                jupyter.actions.call('jupyter-notebook:run-all-cells-below');
                jupyter.actions.call('jupyter-notebook:save-notebook');
            });
        }
    );
</script>

请注意,如果清除上述单元格的输出,则必须重复步骤 2 和 3。

提示

对于您可能想要实现的目标,您可以考虑这些更合适的解决方案:

  • Jupyer Thebe:在与 ipython-内核后端通信的静态页面中嵌入代码片段。
  • nteract: Build Electron 基于笔记本的应用程序。
  • Dashboards:"official"允许预先配置笔记本单元格输出网格 ("dashboards") 的努力,将它们打包并作为独立的网络应用程序提供服务。

您可以在 this article 中找到情况摘要。

争议

类似的问题已经asked before in other sites, but in this googlegroup thread,有人提交了解决方案,群版主删除了它(!),显然是为了保护地球上的生命:-) 所以,小心点!

我刚刚找到了一种很容易做到这一点的方法。如果您安装 nbextensions 包 (https://github.com/ipython-contrib/jupyter_contrib_nbextensions),其中一个扩展称为 "Initialization cells",它允许您在加载笔记本时自动将某些单元格标记为 运行。