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.
3 réponses
(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.
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.