重新打开笔记本时,我通常必须重新运行(大多数部分)笔记本,以便访问以前定义的变量并继续工作。
然而,有时我想跳过一些对后续细胞没有影响的细胞(例如,它们可能包含完成的分析分支)并且可能需要很长时间才能运行。这些细胞可以分散在整个笔记本中,因此像“全部运行”这样的东西也无济于事。
有没有办法实现这个目标?
理想情况下,这些单元格可以使用一些特殊标记进行标记,以便它们可以手动“运行”,但在“全部运行”时将被跳过。
修改
@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$'))
答案 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中的“初始化单元格”。安装/激活后,您可以在任何笔记本电脑中将单元标记为“初始化单元”,然后可以使用特定按钮运行该单元。
启动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)