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)
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,但此错误消息会被忽略且无害。
或者,我猜想将单元格转换为原始单元格(如接受的答案中所示)也可以工作,尽管它可能不再将内容格式化为代码,现在显示它是原始文本。
其他一些提议的解决方案更加特定于平台。
如果不希望加载缓存结果,我发现Freeze
nbextension 对此非常有用。
尽管是非官方的,但我强烈建议您尝试使用这些笔记本扩展,如果您以前从未使用过它们。
要安装扩展机械,
$ pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install
Run Code Online (Sandbox Code Playgroud)
要启用Freeze
扩展,请启动jupyter notebook
并打开一个新笔记本,从菜单中选择Edit
> nbextensions config
,然后选中Freeze
。