如何腌制或存储木星(IPython)笔记本会议以后

假设我在 Jupyter/Ipython 笔记本上做了一个更大的数据分析,完成了大量耗时的计算。然后,由于某种原因,我必须关闭 jupyter 本地服务器 I,但是我希望稍后再回来进行分析,而不必再次进行所有耗时的计算。


我想 喜欢做的是 pickle或存储整个木星会话(所有熊猫数据帧,np.array,变量,...) ,这样我就可以安全地关闭服务器,知道我可以返回到我的会话完全相同的状态,像以前一样。

这在技术上可行吗? 有没有我忽略的内置功能?


编辑: 基于 这个的答案有一个 %store 魔法,它应该是“轻量级泡菜”。然而,您必须手动存储这些变量,如下所示:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
关闭会话,重新启动内核
刷新
print(foo) # "A dummy string"

这与我想要的相当接近,但是必须手动完成并且无法区分不同的会话,这使得它不太有用。

63428 次浏览

(我宁愿发表评论,而不是提供这个作为一个实际的答案,但我需要更多的声誉来评论。)

您可以系统地存储大多数类似数据的变量。我通常做的是在 熊猫 HDFStore中存储所有数据框架、数组等。在笔记本的开头,声明

backup = pd.HDFStore('backup.h5')

然后在生成新变量时存储它们

backup['var1'] = var1

最后,也许是个好主意

backup.close()

下次你想继续使用笔记本电脑时:

backup = pd.HDFStore('backup.h5')
var1 = backup['var1']

说实话,我也更喜欢 ipython 笔记本的内置功能。你不可能以这种方式保存所有东西(例如对象、连接) ,而且很难用这么多样板代码来保持笔记本的组织性。

这个问题涉及到: 如何在 IPython 笔记本中缓存?

为了保存单个细胞的结果,缓存魔法派上了用场。

%%cache longcalc.pkl var1 var2 var3
var1 = longcalculation()
....

重新运行笔记本时,将从缓存加载此单元格的内容。

这并不能准确地回答您的问题,但是当所有冗长计算的结果被快速恢复时,这可能就足够了。这种结合点击运行-所有按钮在笔记本电脑的顶部是一个可行的解决方案。

缓存魔法无法保存整个笔记本 还没有的状态。据我所知,目前还没有其它系统可以恢复“笔记本”。这需要保存 Python 内核的所有历史记录。在加载笔记本并连接到内核之后,应该加载这些信息。

我认为迪尔很好地回答了你的问题。

pip install dill

保存笔记本会话:

import dill
dill.dump_session('notebook_env.db')

恢复笔记本会话:

import dill
dill.load_session('notebook_env.db')

来源