Python Jupyter笔记本电脑打开时运行所有单元格
我有一个Jupyter noteboook,我正在尝试设置它,以便在打开笔记本时所有单元格都自动运行 此行为不同于包含小部件的笔记本电脑的保存输出。小部件似乎只有在包含它们的单元格运行时才会呈现给我。考虑下面的例子:Python Jupyter笔记本电脑打开时运行所有单元格,python,jupyter-notebook,ipython,jupyter,Python,Jupyter Notebook,Ipython,Jupyter,我有一个Jupyter noteboook,我正在尝试设置它,以便在打开笔记本时所有单元格都自动运行 此行为不同于包含小部件的笔记本电脑的保存输出。小部件似乎只有在包含它们的单元格运行时才会呈现给我。考虑下面的例子: from IPython.display import display from IPython.html.widgets import IntSlider w = IntSlider() display(w) 在执行单元格之前,不会显示滑块 这是否可以通过笔记本元数据或配置文
from IPython.display import display
from IPython.html.widgets import IntSlider
w = IntSlider()
display(w)
在执行单元格之前,不会显示滑块
这是否可以通过笔记本元数据或配置文件实现
编辑:似乎是这样做的:请注意,当您打开页面时,笔记本没有运行,当它们打开时,显示输出
EDIT2:添加示例。我认为这是不可能的 ipython不会执行代码,除非它是1)有意的,2)可信的。否则,您将遇到加载包含恶意代码的笔记本的情况 您可以在此处查看ipythons安全模型的详细信息:。特别是关于打开笔记本时代码执行的部分:“我们需要解决的安全问题是,不应该仅仅因为用户打开了他们没有编写的笔记本就执行代码” 虽然您可以在笔记本上设置显式信任,但我不确定这是否也会允许自动代码执行。我没见过这样的东西,但也许我只是看得不够仔细。我在其他地方看到,自动代码执行在核心ipython包中是不可用的。请在此处检查此问题: 除了信任之外,我怀疑这不可能的另一个原因是:1)自动代码执行将替换当前保存在笔记本中的任何现有输出,这可能并不理想;2)某些笔记本可能包含计算成本高昂的复杂代码,你不希望每次打开笔记本时都运行它
%%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>
%%%html
//自动运行笔记本电脑上的所有单元格!
要求(
['base/js/namespace','jquery'],
函数(jupyter,$){
$(jupyter.events).on(“kernel\u ready.kernel”,函数(){
log(“自动运行下面的所有单元格…”);
jupyter.actions.call('jupyter-notebook:运行下面的所有单元格');
jupyter.actions.call('jupyter-notebook:saveNotebook');
});
}
);
请注意,如果清除上述单元格的输出,则必须重复步骤2和3
提示
你可以考虑这些更合适的解决方案来解决你可能要达到的目标:
- :在与ipython内核后端通信的静态页面中嵌入代码段
- :从笔记本电脑构建基于应用程序
- :允许预先配置笔记本电池输出网格(“仪表板”)的“官方”努力,将其打包并作为独立的web应用程序提供
所以,小心点 我刚刚找到了一种很容易做到这一点的方法。如果安装nbextensions包(),其中一个扩展名为“初始化单元”并允许您标记某些单元格,以便在加载笔记本时自动运行。似乎是这样做的:请注意,打开页面时笔记本未运行,打开时显示输出。当我在该网站上打开Julia笔记本时,绘图显示在笔记本内,但是顶部的状态是“内核正在启动,请稍候”,这让我觉得绘图只是保存了输出,而单元格实际上没有加载运行。也许我遗漏了一些东西,但是你想要实现的与仅仅保存一个带有输出的笔记本有什么不同呢?我的一些单元格包含,并且在单元格运行之前不会显示这些单元格。简单示例:从IPython.display导入display从IPython.html.widgets导入IntSlider w=IntSlider()显示(w)您可能希望通过引用以下部分来改进您的答案:如本部分“我们需要解决的安全问题是,任何代码都不应该仅仅因为用户打开了他们没有编写的笔记本而执行。和其他任何程序一样,一旦用户决定在笔记本中执行代码,它就被认为是可信的,应该被允许做任何事情。“据我所知,Python代码是在托管笔记本的服务器上运行的。因此,我不认为在服务器上执行任意代码会成为客户机的安全问题。对于服务器端来说,从安全角度来看,代码是在打开时执行还是手动执行并不重要。我不确定是否遵循了这个论点:据我所知,Python代码是在托管笔记本的服务器上运行的。它如何在客户端执行某些东西(除了Javascript,Javascript可以嵌入到您访问的任何站点中)?因此,如果有人将
os.system(“rm-rf*”)
放在自动运行的笔记本中,那么就可以了?不适合我,我使用Linux桌面。若它位于服务器上,而不是根目录,它仍将删除服务器上有人可能需要的文件或导致维护问题的文件。我想,如果你使用一次性虚拟机,这可能没问题,事实上,基于jupyter的berkeley spark课程就是这样运行的(一次性虚拟机,而不是自动运行脚本)。注意:有一个“受信任的”ipython笔记本,从命令行用ipython trust filename.ipynb
或网站文件菜单中的信任命令进行标记。看不出这与手动登录的用户有什么不同