Jupyter(IPython)ノートブックセッションを後でピクルするか保存する方法


98

Jupyter / Ipythonノートブックで時間のかかる多くの計算を実行して、より大きなデータ分析を行っているとしましょう。次に、なんらかの理由で、jupyterローカルサーバーをシャットダウンする必要がありますが、時間のかかるすべての計算を再度実行する必要なく、後で分析に戻る必要があります。


私はなりたいとやって愛をされてpickle、私は安全にサーバーをシャットダウンすることができるように(すべてのパンダのデータフレーム、np.arrays、変数、...)、または全体Jupyterセッションを保存することは、私はとまったく同じ状態で私のセッションに戻ることができます知っています前。

技術的にも可能ですか?見落とした組み込みの機能はありますか?


編集:この答えに基づいて「軽量ピクルス」でなければならない%store 魔法があります。ただし、次のように変数を手動で保存する必要があります。

#inside a ipython/nb session
foo = "A dummy string"
%store foo
参照を閉じ、カーネルを再起動します#r
%store -r foo更新
print(foo) # "A dummy string"

これは私が望むものにかなり近いですが、手動で行う必要があり、異なるセッションを区別できないため、あまり役に立ちません。


1
これについて何か進展はありますか?変数を* .matに保存できるSpyder IDEのワークスペースがあることに気づきました。しかし、これがJupyter Notebookに移植できるかどうかはわかりません。
cqcn1991 2016

pypi.python.org/pypi/dillを検討しましたか?「ディルは次の機能も提供します:-pythonインタープリターセッションの保存と読み込み」それはpythonですが、ipythonやカーネルに他に何が関係しているかはわかりません
piccolbo

回答:


64

ディルはあなたの質問にうまく答えると思います。

pip install dill

ノートブックセッションを保存します。

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

ノートブックセッションを復元します。

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

ソース


1
ジェネレーターがあると失敗します(これは私が考えると理にかなっています)。
ロビン・ネメス

1
私にとってはうまくいきました。注意すべき点:まず、pyodbc接続オブジェクトがぶら下がっている場合は、それらを閉じてすべてをNoneに設定する必要があります。それ以外の場合は、「TypeError:cany pickle pyodbc.Connection objects」エラーが発生します。 。次に、ノートブックの状態には、コードによって生成されたグラフが含まれていないため、セルを再実行してこれらを元に戻す必要があります。
Michael Szczepaniak

しかし、それは私が別のマシンに保存したファイルを使用動作しません
ジャヤA

27

(実際の回答として提供するよりもコメントしたいのですが、コメントするにはもっと評判が必要です。)

ほとんどのデータのような変数を体系的に格納できます。私が通常行うことは、すべてのデータフレーム、配列などをpandas.HDFStoreに格納することです。ノートブックの冒頭で、宣言します

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

そして、それらを生成するときに新しい変数を保存します

backup['var1'] = var1

最後に、おそらく良いアイデア

backup.close()

サーバーの電源を切る前に。次回、ノートブックを続行する場合:

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

正直言って、私もipythonノートブックの組み込み機能を好むでしょう。この方法ですべて(オブジェクト、接続など)を保存することはできません。また、大量の定型コードでノートブックを整理することは困難です。


5
これは非常に興味深い回避策ですが、そのようなシステムを維持することに伴う苦痛を文字通り感じることができます。ヒントをありがとう:)
Robin Nemeth

19

この質問に関連しています:IPython Notebookにキャッシュする方法?

個々のセルの結果を保存するには、キャッシングマジックが役立ちます。

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

ノートブックを再実行すると、このセルの内容がキャッシュから読み込まれます。

これはあなたの質問に正確に答えているわけではありませんが、すべての時間のかかる計算の結果が迅速に回復されるときに十分かもしれません。これは、ノートブックの上部にあるすべて実行ボタンを押すことと組み合わせることで、私にとっては実行可能なソリューションです。

キャッシュマジックでは、まだノートブック全体の状態を保存できませ。私の知る限り、「ノートブック」を再開するシステムはまだありません。これには、Pythonカーネルのすべての履歴を保存する必要があります。ノートブックをロードしてカーネルに接続した後、この情報をロードする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.