如何(间歇性地)在运行IPython笔记本时跳过某些单元格?

时间:2013-10-11 02:25:50

标签: python ipython ipython-notebook ipython-magic

重新打开笔记本时,我通常必须重新运行(大多数部分)笔记本,以便访问以前定义的变量并继续工作。

然而,有时我想跳过一些对后续细胞没有影响的细胞(例如,它们可能包含完成的分析分支)并且可能需要很长时间才能运行。这些细胞可以分散在整个笔记本中,因此像“全部运行”这样的东西也无济于事。

有没有办法实现这个目标?

理想情况下,这些单元格可以使用一些特殊标记进行标记,以便它们可以手动“运行”,但在“全部运行”时将被跳过。

修改

@jakob建议的

%%cache(ipycache扩展)在一定程度上解决了这个问题。

实际上,我甚至不需要在重新运行时加载任何变量(对于后续单元格而言可能很大但不必要),只有存储的输出才是分析结果。

作为解决方法,将%%cache folder/unique_identifier放在单元格的开头。代码将只执行一次,重新运行时不会加载任何变量,除非你删除unique_identifier文件。

不幸,使用%%cache重新运行时,所有输出结果都会丢失...

EDIT II (2013年10月14日)

ipython + ipycache的主版本现在也在腌制(并重新显示)代码单元输出。

对于包括Latex,HTML(pandas DataFrame输出)在内的丰富显示输出,请记住使用IPython的display()方法,例如display(Latex(r'$\alpha_1$'))

7 个答案:

答案 0 :(得分:29)

目前,IPython笔记本中没有此类功能。 尽管如此,仍有一些可能让您的生活更轻松,例如:

  • 使用%store或更好的%%cache魔法(扩展名)来存储这些间歇性单元格的结果,因此不必重新计算它们(请参阅{{3} })

  • 在您不想执行的单元格之前添加if==0:

  • 将这些单元格转换为原始单元格(但您将丢失已存储的输出!)

(见https://github.com/rossant/ipycache上的讨论)

答案 1 :(得分:27)

虽然这并不是您想要查找的内容,但如果您希望完全省略单元格的执行(未加载缓存结果),则可以在单元格的开头添加以下hack(假设您使用的是基于unix的操作系统):

Set Git Bash as default prompt

答案 2 :(得分:2)

这个问题有点老了,但是最方便的答案似乎丢失了。您可以使用NBextensions中的“初始化单元格”。安装/激活后,您可以在任何笔记本电脑中将单元标记为“初始化单元”,然后可以使用特定按钮运行该单元。

  • 安装NBextensions:here
  • 启动jupyter仪表板时激活“初始化单元格”

  • 在笔记本中的“视图”菜单中,选择“单元格工具栏”,然后选择“初始化单元格”

  • 现在每个单元格旁边都有一个复选框。标记所有要运行以进行初始化的单元格
  • 重新打开笔记本时,单击类似于袖珍计算器的按钮以运行所有初始化单元格。

答案 3 :(得分:1)

%%script false解决方案在2019年停止工作了一段时间。

以下是一些其他可用的解决方法。这些基于程序,当您告诉他们不要期望任何参数时,它们会忽略它们的参数。这里有一些简单的例子:

Perl:

%%perl -e0
​
for i in range(10): print(i)

您正在运行:perl -e '0' cellcontents

更令人难忘的版本:

%%perl -eat
​
for i in range(10): print(i)

您正在运行:perl -e 'at' cellcontents

重击:

%%bash -c :

for i in range(10): print(i)

':'是bash中的noop,因此您正在运行:bash -c : cellcontents

我没有看过外部魔术实现代码,但是我很确定“ cellcontents”将作为参数传递,并且不会被shell误解释,例如是否要包含“;”。他们不小心注入了一些错误的代码。但是我不能保证你。

我敢肯定,您可以在这里查看受支持的程序,以提出其他创造性的解决方案:https://ipython.readthedocs.io/en/stable/interactive/magics.html#cell-magics

答案 4 :(得分:1)

这是一个简单且通用的解决方案,不需要解决方法: 只需将其作为单元格的顶行键入即可跳过该单元格:

%% script回声跳过

它已经在Windows和Mac上使用最新的Jupyter进行了测试,我认为它也应该在其他类似Unix的平台上运行,因为它们也具有echo命令。其他一些建议的解决方案是特定于平台的。

当然,您可以输入喜欢的文字,而不用“跳过”。当您执行单元格时,它将仅打印此文本,而不执行单元格中的代码。

答案 5 :(得分:1)

跳过jupyter笔记本单元格中的python代码的最简单方法是暂时将这些单元格转换为markdown。

答案 6 :(得分:0)

如果不希望加载任何缓存的结果,我会发现Freeze nbextension为此非常有用。

enter image description here

尽管是非正式的,但如果您以前从未使用过,我强烈建议您尝试使用这些笔记本扩展。

要安装扩展机器,

$ pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install

要启用Freeze扩展名,请启动jupyter notebook并打开一个新笔记本,从菜单中选择Edit> nbextensions config,然后选中Freeze