2013-07-11 5 views
3

파이썬의 현재 환경에서 모든 작업 데이터 (객체?)를 저장하는 'backup(filename)' 함수를 작성하고 데이터/객체를 다시 복원하려면 'restore(filename)'을 작성하고 싶습니다. R의 save.image(file="workspace21.RData")load(file="workspace21.RData")처럼 시스템을 스냅 샷 할 수 있습니다.파이썬의 현재 작업 환경을 백업하고 복원하는 방법은 무엇입니까?

"백업"& "복원"을 쓰는 방법은 무엇입니까? 아니면 존재할 수있는 패키지가 있습니까?

+0

[pickle] (http://docs.python.org/2/library/pickle.html)과 같은 의미입니까? – dwxw

+0

피클과 다소 비슷합니다. 전체 작업 영역을 피클해야하지만 파이썬 개체 중 일부는 not_picklable이므로 피클이 해결책인지 의심 스럽습니다. – bigbug

+0

예를 들어, matplotlib.figure.Figure 객체는 pickleable이 아니며, cPickle.dump (fig, open ("Z : \\ pic.pkl", 'w'), cPickle.HIGHEST_PROTOCOL)는 TypeError : 예상 문자열 또는 유니 코드 객체 , NoneType found – bigbug

답변

2

피클 모듈은 해결책처럼 보이지만 실제로 전체 환경을 저장할 수는 없습니다. 예를 들면 다음과 같습니다.

import pickle 

def backup(fileName): 
    pickle.dump(globals(), open(fileName,'w'), pickle.HIGHEST_PROTOCOL) 

def restore(fileName): 
    globals().update(pickle.load(open(fileName,"rb"))) 

모듈 객체는 picklable이 아니기 때문에 작동하지 않습니다. 또한 열린 파일 설명자 및 기타 객체에 문제가 있습니다. (부분) 솔루션이 질문에 답변을 참조하십시오

How can I save all the variables in the current python session?

을 그래서, 당신은 당신의 문제에 대한 일반적인 솔루션을 수는 없지만, 당신은을 사용하여 전역 객체의 일부를 저장합니다 뭔가를 쓸 수 있습니다 스 니펫을 시작점으로 사용하면 도움이됩니다.

+0

나를 위해 한 가지 더 많은 문제는 함수에 의해 pickled 파일에서 global() 네임 스페이스로 저장된 변수를로드하는 방법이다. def restore (fileName) : cPickle.load (open (fileName, "rb")) 변수를 전역 네임 스페이스로 다시 복원 할 수 없습니다. – bigbug

+1

globals(). update (cPickle.load (open (fileName, "rb"))) – piokuc

3

기본적으로 조금 중요하지만 전체 솔루션이 정말 필요한 경우 가상 컴퓨터에서 파이썬을 실행하고 스냅 샷을 사용하여 세션 상태를 저장할 수 있습니다. 실용적인지 여부는 유스 케이스에 달려 있습니다.

+0

유용한 팁이 있습니다. 그것은 조금 무거운 무게 솔루션이지만. – bigbug

관련 문제