Comment faire pour ramasser ou stocker Jupyter (IPython) session de carnet pour plus tard

disons que je fais une plus grande analyse de données dans le bloc-notes Jupyter/Ipython avec beaucoup de temps de calculs effectués. Ensuite, pour certaines raisons, j'ai arrêter le jupyter serveur local j'ai, mais je voudrais revenir à faire l'analyse plus tard, sans avoir à passer par tous les temps de calculs de nouveau.


Ce que je comme l'amour à faire est de pickle ou de stocker l'ensemble de Jupyter session (toutes les données pandas, np.les tableaux, les variables, les ...) donc je peux arrêter le serveur, sachant que je peux retourner à ma session exactement dans le même état qu'avant.

est-ce techniquement possible? Y a-t-il une fonctionnalité intégrée que j'ai oubliée?


EDIT: basé sur ce réponse il existe une %store magie qui doit être "léger cornichon". Cependant, vous devez stocker les variables manuellement comme cela:

#inside a ipython/nb session

foo = "A dummy string"

%store foo

fermeture de la lésion, redémarrage du noyau

%store -r foo # R pour rafraîchir

print(foo) # "A dummy string"

qui est assez proche de ce que je voudrais, mais d'avoir à le faire manuellement et être incapable de distinguer entre les différentes séances rend moins utile.

51
demandé sur Community 2015-12-17 21:53:24

3 réponses

je pense que Dill répond bien à votre question.

pip install dill

Enregistrer un Carnet de notes de la session:

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

Restaurer un Carnet de notes de la session:

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

Source

8
répondu MetalloyD 2018-06-22 09:57:25

(je préférerais commenter plutôt que d'offrir cette réponse comme une réponse réelle, mais j'ai besoin de plus de réputation pour commenter.)

vous pouvez stocker la plupart des variables de type données d'une manière systématique. Ce que je fais habituellement est de stocker toutes les images de données, tableaux, etc. dans pandas.HDFStore . Au début du carnet, déclarez

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

et ensuite stocker toutes les nouvelles variables que vous produisez

backup['var1'] = var1

à la fin, probablement une bonne idée de faire

backup.close()

avant d'éteindre le serveur. La prochaine fois que vous voulez continuer avec le portable:

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

à vrai dire, je préférerais une fonctionnalité intégrée dans le bloc-notes ipython. Vous ne pouvez pas tout enregistrer de cette façon (par exemple les objets, les connexions), et il est difficile de garder le carnet organisé avec autant de codes boilerplate.

16
répondu Anh Huynh 2015-12-17 19:16:52

cette question est liée à: comment mettre en cache dans le bloc-notes IPython?

pour enregistrer les résultats des cellules individuelles, le cache magie est pratique.

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

lors de la rediffusion du carnet, le contenu de cette cellule est chargé à partir du cache.

Ce n'est pas exactement répondre à votre question, mais il pourrait être assez d'lorsque les résultats de tous les longs les calculs sont récupérés rapidement. Ceci en combinaison de frapper le bouton run-all sur le dessus du bloc-notes est pour moi une solution réalisable.

la magie de cache ne peut pas sauver l'état d'un carnet entier encore . À ma connaissance, il n'y a pas encore d'autre système pour reprendre un "carnet". Cela nécessiterait de sauvegarder toute l'histoire du noyau python. Après avoir chargé le bloc-notes, et se connecter à un noyau, cette information doit être chargée.

9
répondu Vasco 2017-05-23 12:34:34