Як замаринувати або зберегти сесію блокнота Jupyter (IPython) для подальшого використання


101

Скажімо, я роблю більший аналіз даних у блокноті Jupyter / Ipython із великою кількістю трудомістких обчислень. Потім, з якихось причин, я повинен вимкнути локальний сервер jupyter I, але я хотів би повернутися до аналізу пізніше, без необхідності проходити повторно всі трудомісткі обчислення.


Що б я хотів би зробити це pickleабо зберігати всю сесію Jupyter (всі панда dataframes, np.arrays, змінні, ...) , тому я можу спокійно вимкнути сервер , знаючи , що я можу повернутися до моєї сесії в точно такому ж стані , як раніше.

Це навіть технічно можливо? Чи є вбудована функціональність, яку я пропустив?


РЕДАГУВАТИ: на основі цієї відповіді існує %store магія, яка повинна бути "легким солінням". Однак вам потрібно зберігати змінні вручну так:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
закриття seeion, перезапуск ядра
%store -r foo # r для оновлення
print(foo) # "A dummy string"

що є досить близьким до того, що я хотів би, але якщо це робити вручну і неможливість розрізнити різні сеанси, це стає менш корисним.


1
Якийсь прогрес у цьому? Я лише помітив, що в Spyder IDE є робоча область, яка може зберігати змінні в * .mat. Але не впевнений, чи можна це перенести в блокнот Jupyter.
cqcn1991

Ви розглядали pypi.python.org/pypi/dill ? "dill також надає можливість: - зберігати та завантажувати сеанси інтерпретатора python" Однак це python, не впевнений, що ще пов'язане з ipython або ядром
piccolbo

Відповіді:


64

Думаю, Кріп добре відповів на ваше запитання.

pip install dill

Збереження сесії блокнота:

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

Відновлення сеансу блокнота:

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

Джерело


1
не вдається, коли є генератори (що має сенс, коли я про це думаю), але, здається, це настільки близько, на що ми можемо сподіватися!
Робін Немет,

1
Відмінно працював для мене. Пару речей, про які слід пам’ятати: По-перше, якщо у вас є об’єкти підключення pyodbc, їх потрібно закрити, а потім встановити для них значення None, інакше з’являється помилка «TypeError: не вдається замаринувати pyodbc.Connection об’єкти» . По-друге, стан блокнота не включає графіки, створені вашим кодом, тому вам доведеться перезапустити комірки, щоб повернути їх назад.
Michael Szczepaniak

Але це не працює. Я використав збережений файл на іншій машині
Jaya A

Встановлений кріп. Чи потрібно імпортувати кріп dill.dump_session ('notebook_env.db') із командного рядка?
cheznead

Ні, вам потрібно буде це зробити під час запуску блокнота Jupyter. І dump_session, і load_session повинні проходити через блокнот. Ваша load_session може бути на початку блокнота. А dump_session може бути в самому кінці зошита.
MetalloyD

27

(Я волів би коментувати, ніж пропонувати це як реальну відповідь, але мені потрібно більше репутації, щоб коментувати.)

Ви можете систематично зберігати більшість змінних, схожих на дані. Зазвичай я зберігаю всі кадри даних, масиви тощо у pandas.HDFStore . На початку зошита заявіть

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

а потім зберігати будь-які нові змінні під час їх створення

backup['var1'] = var1

Зрештою, мабуть, хорошу ідею зробити

backup.close()

перед вимкненням сервера. Наступного разу, коли ви захочете продовжити записник:

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

По правді кажучи, я б також віддав перевагу вбудованим функціоналам у ноутбуці ipython. Ви не можете зберегти все таким чином (наприклад, об'єкти, з'єднання), і важко зберегти ноутбук організованим із такою кількістю шаблонних кодів.


5
Це дуже цікаве рішення, але я буквально відчуваю біль, пов’язаний із підтримкою такої системи. Дякую за підказку
Робін Немет,

19

Це питання пов'язане з: Як кешувати в блокноті IPython?

Для збереження результатів роботи окремих клітин магія кешування дуже корисна.

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

Під час повторного запуску блокнота вміст цієї комірки завантажується з кешу.

Це не точна відповідь на ваше запитання, але цього може бути достатньо, щоб результати всіх тривалих обчислень швидко відновлювались. Для мене це поєднання натискання кнопки загального запуску у верхній частині ноутбука є дієвим рішенням.

Магія кеш не може зберегти стан цілого ноутбука ще . Наскільки мені відомо, поки немає жодної іншої системи для відновлення "зошита". Для цього потрібно зберегти всю історію ядра python. Після завантаження блокнота та підключення до ядра цю інформацію слід завантажити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.