58

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

但是,有时我想跳过一些对后续单元格没有影响的单元格(例如,它们可能包含已完成的分析分支)并且可能需要很长时间才能运行。这些单元格可以分散在整个笔记本中,因此“Run All below”之类的内容不会有太大帮助。

有没有办法做到这一点?

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

编辑

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

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

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

不幸的是,当重新运行时,所有的输出结果都丢失了%%cache......

编辑二(2013 年 10 月 14 日)

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

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

4

7 回答 7

60

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

%%script false

或变体(从 2020 年初开始工作——请参阅此处了解说明):

%%script false --no-raise-error
于 2016-05-18T19:09:21.140 回答
40

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

  • 使用%store或更好的%%cache魔法(扩展)来存储这些间歇性单元格的结果,因此不必重新计算它们(参见https://github.com/rossant/ipycache

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

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

(参见https://github.com/ipython/ipython/issues/2125的讨论)

于 2013-10-11T12:41:45.623 回答
7

如果预计不会加载缓存结果,我发现Freezenbextension 对此非常有用。

在此处输入图像描述

虽然是非官方的,但如果您以前从未使用过这些笔记本扩展,我强烈建议您尝试一下。

要安装扩展机械,

$ pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install

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

于 2019-12-15T02:55:33.960 回答
5

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

%%script echo skipping

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

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

于 2020-05-01T14:41:45.673 回答
2

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

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

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

  • 现在每个单元格旁边都有一个复选框。标记要运行以进行初始化的所有单元格
  • 重新打开笔记本时,单击看起来像袖珍计算器的按钮以运行所有初始化单元。
于 2020-05-18T08:03:37.493 回答
2

跳过 jupyter notebook 单元格中的 python 代码运行的最简单方法,我暂时将这些单元格转换为 markdown。

于 2020-11-23T13:31:10.197 回答
1

%%script false解决方案在 2019 年的某个时间停止工作。

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

珀尔:

%%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 中的无操作,因此您正在运行:bash -c : cellcontents

我没有看过外部魔法实现代码,但我很确定“cellcontents”作为参数传递并且不会被shell错误解释,比如如果你要包含;它们并意外注入一些错误代码. 但我不能向你保证。

我相信您可以通过查看此处支持的程序来提出其他创造性的解决方案:https ://ipython.readthedocs.io/en/stable/interactive/magics.html#cell-magics

于 2020-01-19T00:38:39.063 回答