Jak zapisać lub zapisać sesję notebooka Jupyter (IPython) na później

Załóżmy, że robię większą analizę danych w notebooku Jupyter / Ipython i wykonuję wiele czasochłonnych obliczeń. Następnie, z jakiegoś powodu, muszę wyłączyć lokalny serwer jupyter I, ale chciałbym wrócić do robienia analizy później, bez konieczności ponownego przechodzenia przez wszystkie czasochłonne obliczenia.


To, co chciałbym zrobić to pickle lub zapisać całą sesję Jupytera (wszystkie ramki danych pandy, np.tablice, zmienne,...) więc mogę bezpiecznie wyłącz serwer wiedząc, że mogę wrócić do mojej sesji w dokładnie tym samym stanie, co wcześniej.

Czy to w ogóle możliwe? Czy jest wbudowana funkcjonalność, którą przeoczyłem?


EDIT: na podstawie ta odpowiedź jest %store magiczny , który powinien być "lekki ogórek". Jednak musisz zapisać zmienne ręcznie w ten sposób:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
zamknięcie seesion, ponowne uruchomienie jądra
%store -r foo # r jak odświeżanie
print(foo) # "A dummy string"

Co jest dość zbliżone do tego, czego bym chciał, ale konieczność zrobienia tego ręcznie i niemożność rozróżnienia różnych sesji sprawia, że jest to mniej przydatne.

Author: Community, 2015-12-17

3 answers

Myślę, że Dill dobrze odpowiada na twoje pytanie.

pip install dill

Zapisz sesję notebooka:

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

Przywróć sesję notebooka:

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

Źródło

 8
Author: MetalloyD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 09:57:25

(wolałbym skomentować, niż zaoferować to jako rzeczywistą odpowiedź, ale potrzebuję więcej reputacji, aby skomentować.)

Możesz przechowywać większość zmiennych podobnych do danych w sposób systematyczny. To, co zwykle robię, to przechowywanie wszystkich ramek danych, tablic itp. w pandach.HDFStore . Na początku notatnika zadeklaruj

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

A następnie przechowuj nowe zmienne, gdy je wytwarzasz

backup['var1'] = var1

Na koniec, prawdopodobnie dobry pomysł do zrobienia

backup.close()

Przed wyłączeniem serwera. Następnym razem chcesz kontynuować zeszyt:

backup = pd.HDFStore('backup.h5')
var1 = backup['var1']
Prawdę mówiąc, wolałbym wbudowaną funkcjonalność w notebooku ipython. Nie można zapisać wszystkiego w ten sposób (np. obiektów, połączeń), i trudno jest utrzymać Notebook zorganizowany z tak dużą ilością kodów boilerplate.
 16
Author: Anh Huynh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-17 19:16:52

To pytanie jest związane z: Jak buforować w notebooku IPython?

Aby zapisać wyniki poszczególnych komórek, przydaje się magia buforowania .

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

Podczas ponownego uruchamiania notatnika zawartość tej komórki jest ładowana z pamięci podręcznej.

To nie jest dokładnie odpowiedź na twoje pytanie, ale może to wystarczyć, gdy wyniki wszystkich długich obliczeń zostaną szybko odzyskane. To w połączeniu z naciśnięciem przycisku run-all na górze notebooka jest dla mnie wykonalne rozwiązanie.

Magia pamięci podręcznej nie może zapisać stanu całego notatnika jeszcze . Według mojej wiedzy nie ma jeszcze żadnego innego systemu, który mógłby wznowić "notatnik". Wymagałoby to zapisania całej historii jądra Pythona. Po załadowaniu notebooka i podłączeniu do jądra informacja ta powinna zostać załadowana.

 9
Author: Vasco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:34