让我们说我在Jupyter / Ipython笔记本中进行了更大规模的数据分析,并且完成了大量耗时的计算。然后,出于某种原因,我必须关闭jupyter本地服务器I,但是我想稍后返回进行分析,而不必再次进行所有耗时的计算。
我喜欢喜欢做的是pickle
或存储整个Jupyter会话(所有pandas数据帧,np.arrays,变量......)所以我可以安全地关闭服务器知道我可以以与以前完全相同的状态返回我的会话。
技术上是否可行?是否有我忽略的内置功能?
编辑:根据this回答,有一个%store
magic应该是"轻量级泡菜"。但是,您必须手动存储变量,如下所示:
#inside a ipython/nb session
foo = "A dummy string"
%store foo
关闭视频,重启内核
%store -r foo
#r用于刷新
print(foo) # "A dummy string"
这与我想要的非常接近,但是必须手动完成并且无法区分不同的会话会使它变得不那么有用。
答案 0 :(得分:22)
我认为迪尔很好地回答了你的问题。
pip install dill
保存笔记本会话:
import dill
dill.dump_session('notebook_env.db')
恢复笔记本会话:
import dill
dill.load_session('notebook_env.db')
答案 1 :(得分:21)
(我更愿意发表评论,而不是将其作为实际答案,但我需要更多声誉才能发表评论。)
您可以系统地存储大多数类似数据的变量。我通常做的是在pandas.HDFStore中存储所有数据帧,数组等。在笔记本的开头,声明
backup = pd.HDFStore('backup.h5')
然后在生成它们时存储任何新变量
backup['var1'] = var1
最后,可能是个好主意
backup.close()
关闭服务器之前。下次要继续使用笔记本时:
backup = pd.HDFStore('backup.h5')
var1 = backup['var1']
说实话,我也更喜欢ipython笔记本中的内置功能。你不能以这种方式保存所有东西(例如对象,连接),而且很难用笔记本代码保存笔记本。
答案 2 :(得分:13)
此问题与:How to cache in IPython Notebook?
有关要保存单个单元格的结果,caching magic会派上用场。
%%cache longcalc.pkl var1 var2 var3
var1 = longcalculation()
....
重新运行笔记本时,将从缓存中加载此单元格的内容。
这并不能完全回答你的问题,但是当所有冗长计算的结果快速恢复时,它可能就足够了。结合使用笔记本顶部的run-all按钮,对我来说是一个可行的解决方案。
缓存魔法无法保存整个笔记本yet的状态。据我所知,还没有其他系统可以恢复“笔记本”。这将需要保存python内核的所有历史记录。加载笔记本并连接到内核后,应加载此信息。