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

her*_*h10 33 python ipython ipython-notebook ipython-magic

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

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

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

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

编辑

%%cache (@ ipak扩展)@Jakob建议在某种程度上解决了这个问题.

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

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

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

编辑II(2013年10月14日)

ipython + ipycache的主版本现在也会修改(并重新显示)codecell输出.

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

Mar*_*ark 33

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

%%script false 
Run Code Online (Sandbox Code Playgroud)

  • 用“%%script true”代替“%%script false --no-raise-error”怎么样? (4认同)
  • 它在 Windows 上完美运行。笔记本输出将是“找不到程序:'假'”。 (3认同)
  • @royco它也可以在Windows上使用 (2认同)
  • 这在 2019 年的某个时候停止了工作。您可以在[此处](/sf/answers/4186430811/)找到新的解决方法。 (2认同)

Jak*_*kob 30

目前,IPython笔记本中没有包含此类功能.然而,有一些可能性让你的生活更轻松,例如:

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

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

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

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

雅各布


dab*_*bru 25

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

%%script echo skipping
Run Code Online (Sandbox Code Playgroud)

在所有平台上,它将继续进行,而不执行单元中的代码。

在 Mac 和类 Unix 平台上,它只是将“skipping”打印为单元格输出,以表明它已被跳过。在 Windows 上,它会显示一条错误消息(类似于未找到命令 echo),除非您碰巧安装了提供 echo 命令的东西,例如 cygwin、gnuwin32、bash 或 git,但此错误消息会被忽略且无害。

或者,我猜想将单元格转换为原始单元格(如接受的答案中所示)也可以工作,尽管它可能不再将内容格式化为代码,现在显示它是原始文本。

其他一些提议的解决方案更加特定于平台。


her*_*h10 6

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

在此处输入图片说明

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

要安装扩展机械,

$ pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install
Run Code Online (Sandbox Code Playgroud)

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

  • 看起来是最好的解决方案。当点击“重新启动并运行全部”或其他命令时,冻结的单元将不会重新执行,但单元输出仍然存在。 (4认同)
  • 这是最好的解决方案。即使您按下运行,单元也不会运行,输出仍然存在。 (2认同)