如何备份和恢复python当前的工作环境?

如何备份和恢复python当前的工作环境?,python,backup,Python,Backup,我想编写一个函数'backup(filename)来存储当前Python环境下的所有工作数据(对象?),以及'restore(filename)来再次恢复数据/对象。就像R的save.image(file=“workspace21.RData”)和load(file=“workspace21.RData”)一样,它们可以对系统进行快照 如何编写“备份”和“恢复”?或者有任何软件包可以做到这一点吗?你应该看看。您还可以使用它来帮助您完成所想的事情。pickle模块似乎是一个解决方案,但它不能真正为

我想编写一个函数
'backup(filename)
来存储当前Python环境下的所有工作数据(对象?),以及
'restore(filename)
来再次恢复数据/对象。就像R的
save.image(file=“workspace21.RData”)
load(file=“workspace21.RData”)
一样,它们可以对系统进行快照


如何编写“备份”和“恢复”?或者有任何软件包可以做到这一点吗?

你应该看看。您还可以使用它来帮助您完成所想的事情。

pickle模块似乎是一个解决方案,但它不能真正为您保存整个环境。请尝试以下示例:

import pickle

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

def restore(fileName):
    globals().update(pickle.load(open(fileName,"rb"))) 
这将不起作用,因为模块对象不可拾取。打开的文件描述符和其他对象也会出现问题。有关(部分)解决方案,请参见此问题的答案:


因此,虽然您无法找到问题的通用解决方案,但如果有帮助,您可以使用上面的代码片段作为起点编写一些东西来保存一些(全局)对象。

有点开箱即用,但如果这很重要,并且您真的需要完整的解决方案,您可以在虚拟机中运行python,并使用快照保存会话状态。它是否实用取决于您的用例。

您的意思是喜欢?有点像pickle。我需要它来pickle整个工作区,但有些python对象不可pickle,因此我怀疑pickle是解决方案。例如,matplotlib.figure.figure对象不可pickle,cPickle.dump(fig,open(“Z:\\pic.pkl”,'w'),cPickle.HIGHEST_PROTOCOL)将有TypeError:expected string或Unicode对象,NoneType foundHmm,我发现哪些声音与试图腌制matplotlib图形有关@pelson说1.2版应该支持pickle,但如果我不亲自尝试,我就无法发表评论。matplotlib figure只是一个示例,可能存在其他类型的不可pickle对象。对我来说,还有一个问题是如何通过函数将存储的变量从pickle文件加载到global()命名空间。def restore(fileName):cPickle.load(open(fileName,“rb”))似乎无法将变量还原回全局命名空间。您可以执行如下操作:globals().update(cPickle.load(open(fileName,“rb”))好提示。虽然这是一个有点重的解决方案。