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


101

많은 시간이 소요되는 계산을 통해 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"

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


1
이것에 대한 진전이 있습니까? 변수를 * .mat에 저장할 수있는 작업 공간이 Spyder IDE에 있다는 것을 알아 차 렸습니다. 그러나 이것이 Jupyter Notebook으로 포팅 될 수 있는지 확실하지 않습니다.
cqcn1991

pypi.python.org/pypi/dill 을 고려해 보셨습니까 ? "딜도 할 수있는 기능을 제공합니다 : - 저장 및로드 파이썬 인터프리터 세션"그의 파이썬, 아니지만 다른 있는지 무엇을 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 : ca n't pickle pyodbc.Connection objects"오류가 발생합니다. . 둘째, 노트북 상태에는 코드에서 생성 된 그래프가 포함되지 않으므로 이러한 그래프를 다시 가져 오려면 셀을 다시 실행해야합니다.
Michael Szczepaniak

그러나 그것은 내가 다른 컴퓨터에 저장된 파일 사용이 작동하지 않습니다
자야

설치된 딜. 명령 줄에서 dill 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 Notebook에서 캐시하는 방법?

개별 셀의 결과를 저장하려면 캐싱 마법 이 유용합니다.

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.