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 %store
magic 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'actualisationprint(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.
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')
(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.
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.