如何保存当前Python会话中的所有变量?
我想把我当前的Python环境中的所有变量都保存下来。听说可以用'pickle'这个模块来实现。不过,我不想这么做,主要有两个原因:
- 我得为每个变量都调用一次
pickle.dump()
。 - 当我想要取出这些变量的时候,我必须记住我保存变量时的顺序,然后再用
pickle.load()
一个一个地取出来。
我在找一种命令,可以保存整个会话,这样当我加载这个保存的会话时,所有的变量都能恢复。这样可以吗?
补充一下:我其实不介意为我想保存的每个变量都调用一次pickle.dump()
,但是记住变量保存的确切顺序对我来说是个大麻烦。我想避免这种情况。
7 个回答
13
有一个非常简单的方法,可能会满足你的需求。对我来说,这个方法效果不错:
只需点击在变量浏览器(Spider右侧)上的这个图标:
90
我坐在这里,尝试把 globals()
保存为一个字典,但失败了。后来我发现可以使用 dill 这个库来保存一个会话。
你可以通过以下方式来实现:
import dill #pip install dill --user
filename = 'globalsave.pkl'
dill.dump_session(filename)
# and to load the session again:
dill.load_session(filename)
98
如果你使用 shelve,你就不需要记住对象被保存的顺序,因为 shelve
提供了一个类似字典的对象:
要保存你的工作:
import shelve
T='Hiya'
val=[1,2,3]
filename='/tmp/shelve.out'
my_shelf = shelve.open(filename,'n') # 'n' for new
for key in dir():
try:
my_shelf[key] = globals()[key]
except TypeError:
#
# __builtins__, my_shelf, and imported modules can not be shelved.
#
print('ERROR shelving: {0}'.format(key))
my_shelf.close()
要恢复:
my_shelf = shelve.open(filename)
for key in my_shelf:
globals()[key]=my_shelf[key]
my_shelf.close()
print(T)
# Hiya
print(val)
# [1, 2, 3]