如何保存当前Python会话中的所有变量?

128 投票
7 回答
137926 浏览
提问于 2025-04-15 23:28

我想把我当前的Python环境中的所有变量都保存下来。听说可以用'pickle'这个模块来实现。不过,我不想这么做,主要有两个原因:

  1. 我得为每个变量都调用一次pickle.dump()
  2. 当我想要取出这些变量的时候,我必须记住我保存变量时的顺序,然后再用pickle.load()一个一个地取出来。

我在找一种命令,可以保存整个会话,这样当我加载这个保存的会话时,所有的变量都能恢复。这样可以吗?

补充一下:我其实不介意为我想保存的每个变量都调用一次pickle.dump(),但是记住变量保存的确切顺序对我来说是个大麻烦。我想避免这种情况。

7 个回答

13

有一个非常简单的方法,可能会满足你的需求。对我来说,这个方法效果不错:

只需点击在变量浏览器(Spider右侧)上的这个图标:

以*.spydata格式保存所有变量

加载所有变量或图片等

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]

撰写回答