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