首页 文章

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

提问于
浏览
59

假设我在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 回答

  • 10

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

    pip install dill
    

    保存笔记本会话:

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

    恢复Notebook会话:

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

    Source

  • 13

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

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

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

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

    backup['var1'] = var1
    

    最后,可能是个好主意

    backup.close()
    

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

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

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

  • 18

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

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

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

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

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

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

相关问题