[python] 나중에 Jupyter (IPython) 노트북 세션을 피클하거나 저장하는 방법

많은 시간이 소요되는 계산을 통해 Jupyter / Ipython 노트북에서 더 큰 데이터 분석을 수행한다고 가정 해 보겠습니다. 그런 다음 어떤 이유로 인해 jupyter 로컬 서버 I를 종료해야하지만 시간이 많이 걸리는 모든 계산을 다시 수행 할 필요없이 나중에 분석을 다시 수행하고 싶습니다.


나는 것이 무엇을 좋아 할 수있는 사랑을한다 pickle또는 전체 Jupyter 세션 저장 (모든 팬더를 dataframes, np.arrays, 변수, …) 나는 안전하게 내가 정확히 같은 상태로 내 세션으로 돌아갈 수 있습니다 알고 서버를 종료 할 수 있도록 전에.

기술적으로도 가능합니까? 내가 간과 한 내장 기능이 있습니까?


편집 : 답변을 바탕 으로 “경량 피클”이어야 하는 %store 마법 이 있습니다. 그러나 다음과 같이 수동으로 변수를 저장해야합니다.

#inside a ipython/nb session
foo = "A dummy string"
%store foo
Seesion 닫기,
%store -r foo 새로 고침을 위해 커널 # r 다시 시작
print(foo) # "A dummy string"

내가 원하는 것과 상당히 비슷하지만 수동으로해야하고 다른 세션을 구분할 수 없기 때문에 유용하지 않습니다.



답변

딜이 당신의 질문에 잘 대답한다고 생각합니다.

pip install dill

노트북 세션 저장 :

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

노트북 세션 복원 :

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

출처


답변

(실제 답변으로 제공하는 것보다 댓글을 달고 싶지만 댓글을 달려면 더 많은 평판이 필요합니다.)

대부분의 데이터와 유사한 변수를 체계적인 방식으로 저장할 수 있습니다. 내가 일반적으로하는 일은 모든 데이터 프레임, 배열 등을 pandas.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()
....

노트북을 다시 실행할 때이 셀의 내용이 캐시에서로드됩니다.

이것은 귀하의 질문에 정확히 대답하는 것은 아니지만 모든 긴 계산 결과가 빠르게 복구되는 경우 충분할 수 있습니다. 노트북 상단에있는 실행 버튼을 누르는 조합이 나에게 실행 가능한 솔루션입니다.

캐시 마법은 아직 전체 노트북의 상태를 저장할 수 없습니다 . 내가 아는 한 “노트북”을 재개 할 다른 시스템은 아직 없습니다. 이것은 파이썬 커널의 모든 히스토리를 저장해야합니다. 노트북을로드하고 커널에 연결 한 후이 정보를로드해야합니다.


답변