web-dev-qa-db-fra.com

Comment choisir ou conserver une session de bloc-notes Jupyter (IPython) pour plus tard

Supposons que je réalise une analyse de données plus importante dans le bloc-notes Jupyter/Ipython en effectuant de nombreux calculs fastidieux. Ensuite, pour une raison quelconque, je dois fermer le serveur local jupyter I, mais je voudrais revenir à l'analyse plus tard, sans avoir à refaire tous les calculs fastidieux.


Ce que je voudrais comme J'adore faire pickle ou stocker toute la session Jupyter (all pandas dataframes, np.arrays, variables, ...) afin que je puisse fermer le serveur en toute sécurité, sachant que je peut revenir à ma session dans le même état qu'auparavant.

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


EDIT: basé sur this répond qu'il y a un %storemagic qui devrait être "cornichon léger". Cependant, vous devez stocker les variables manuellement comme ceci:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
fermeture de la section, redémarrage du noyau
%store -r foo # R pour l'actualisation
print(foo) # "A dummy string"

ce qui est assez proche de ce que je voudrais, mais devoir le faire manuellement et être incapable de faire la distinction entre les différentes sessions le rend moins utile.

77
Robin Nemeth

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

pip install dill

Enregistrer une session de bloc-notes:

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

Restaurer une session Notebook:

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

Source

26
MetalloyD

(Je préfère commenter que d’offrir ceci comme réponse, mais j’ai besoin de plus de réputation pour commenter.)

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

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

et ensuite stocker toutes les nouvelles variables que vous produisez

backup['var1'] = var1

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

backup.close()

avant d'éteindre le serveur. La prochaine fois que vous souhaitez continuer avec le bloc-notes:

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

À vrai dire, je préférerais aussi la fonctionnalité intégrée à ipython notebook. Vous ne pouvez pas tout enregistrer de cette manière (objets, connexions, par exemple) et il est difficile de garder le bloc-notes organisé avec autant de codes standard.

22
Anh Huynh

Cette question est liée à: Comment mettre en cache dans IPython Notebook?

Pour sauvegarder les résultats de cellules individuelles, le magie de mise en cache est très utile.

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

Lors de la réexécution du bloc-notes, le contenu de cette cellule est chargé à partir du cache.

Cela ne répond pas exactement à votre question, mais cela pourrait suffire à récupérer rapidement les résultats de tous les calculs volumineux. Cette combinaison de la pression sur le bouton run-all sur le dessus du portable est pour moi une solution viable.

La magie du cache ne peut pas sauvegarder l’état de tout un cahier encore . À ma connaissance, il n’existe pas encore d’autre système pour reprendre un "cahier". Cela nécessiterait de sauvegarder tout l'historique du noyau python. Après le chargement du cahier et la connexion à un noyau, ces informations devraient être chargées.

14
Vasco