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


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


что я как любовь это pickle или хранить весь сеанс Jupyter (все фреймы данных pandas, np.массивы, переменные, ...) поэтому я могу безопасно закрыть сервер, зная, что я могу вернуться к своей сессии в точно таком же состоянии, как и раньше.

это вообще технически возможно? Есть ли встроенная функциональность, которую я пропустил?


EDIT: на основе этого ответа есть %storeмагия, который должен быть "легкий рассольник". Однако вы должны хранить переменные вручную, как Итак:

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

что довольно близко к тому, что я хотел бы, но необходимость делать это вручную и неспособность различать разные сеансы делает его менее полезным.

3   51   2015-12-17 21:53:24

3 ответа:

Я думаю, что укроп хорошо отвечает на ваш вопрос.

pip install dill

сохранить сеанс записной книжки:

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

восстановление сеанса ноутбука:

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

источник

(Я бы скорее прокомментировал, чем предложил это в качестве фактического ответа, но мне нужно больше репутации для комментариев.)

вы можете хранить большинство переменных, подобных данным, систематическим образом. Обычно я храню все фреймы данных, массивы и т. д. в панды.HDFStore. В начале тетради объявите

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

а затем хранить любые новые переменные, как вы их производите

backup['var1'] = var1

в конце концов, наверное, хорошая идея, чтобы сделать

backup.close()

перед выключением сервера. В следующий раз, когда вы хотите продолжить работу с ноутбуком:

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

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

этот вопрос связан с: как кэшировать в IPython Notebook?

чтобы сохранить результаты отдельных ячеек,кэширование магии пригодится.

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

при повторном запуске записной книжки содержимое этой ячейки загружается из кэша.

Это не совсем ответ на ваш вопрос, но это может быть достаточно, когда результаты всех длительные вычисления будут восстановлены быстро. Это в сочетании с ударом кнопка run-all на верхней части ноутбука для меня является работоспособным решением.

магия кэша не может сохранить состояние всего ноутбука и все же. Насколько мне известно, пока нет другой системы, чтобы возобновить "ноутбук". Для этого потребуется сохранить всю историю ядра python. После загрузки ноутбука и подключения к ядру эта информация должна быть загружена.