如何为以后腌制或存储Jupyter(IPython)笔记本会话

假设我在Jupyter / Ipython笔记本中进行了更大规模的数据分析,并完成了大量耗时的计算 . 然后,出于某种原因,我必须关闭jupyter本地服务器I,但是我想稍后返回进行分析,而不必再次进行所有耗时的计算 .


我想要做的是 pickle 或存储整个Jupyter会话(所有pandas数据帧,np.arrays,变量......)所以我可以安全地关闭服务器,知道我可以在完全相同的状态下返回我的会话像之前一样 .

Is it even technically possible? Is there a built-in functionality I overlooked?


EDIT: 基于this回答有一个 %store magic应该是"lightweight pickle" . 但是,您必须手动存储变量,如下所示:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
关闭seeion,重启内核
%store -r foo #r用于刷新
print(foo) # "A dummy string"

这与我想要的非常接近,但是必须手动完成并且无法区分不同的会话会使它变得不那么有用 .

回答(3)

2 years ago

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

pip install dill

保存笔记本会话:

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

恢复Notebook会话:

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

Source

2 years ago

(我更愿意发表评论,而不是将其作为实际答案,但我需要更多的声誉来评论 . )

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

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

然后在生成变量时存储任何新变量

backup['var1'] = var1

最后,可能是个好主意

backup.close()

在关闭服务器之前 . 下次要继续使用笔记本时:

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

说实话,我也更喜欢ipython笔记本中的内置功能 . 你无法以这种方式保存所有东西(例如对象,连接),并且很难用如此多的样板代码来保持笔记本的组织 .

2 years ago

这个问题与以下内容有关:How to cache in IPython Notebook?

为了保存单个单元格的结果,caching magic派上用场了 .

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

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

这并不能完全回答您的问题,但是当所有冗长计算的结果快速恢复时,它可能就足够了 . 结合使用笔记本顶部的run-all按钮对我来说是一个可行的解决方案 .

缓存魔法无法保存整个笔记本yet的状态 . 据我所知,还没有其他系统可以恢复"notebook" . 这将需要保存python内核的所有历史记录 . 加载笔记本并连接到内核后,应加载此信息 .