【问题标题】:python script to pickle entire environmentpython脚本腌制整个环境
【发布时间】:2012-01-04 04:34:38
【问题描述】:

我正在 Python REPL 中工作,我想定期保存我的工作。有人有脚本来转储我定义的所有变量吗?我正在寻找这样的东西:

for o in dir():
    f=open(o)
    pickle(o_as_object, f)

这似乎是其他人做过的事情,所以我想在重新发明轮子之前先问一下。

【问题讨论】:

  • 我认为不可能以如此普遍的方式。并非python中的所有内容都可以腌制,因此您必须编写自己的代码来决定腌制什么,不腌制什么以及如何处理无法腌制的意外值。

标签: python pickle


【解决方案1】:

我想你想要Dill:

除了酸洗 python 对象之外,dill 还提供了以下功能: 在单个命令中保存解释器会话的状态。因此, 保存口译会话是可行的,关闭 解释器,将腌制文件发送到另一台计算机,打开一个新的 解释器,取消会话,从而从“已保存”继续 原始解释器会话的状态。

请注意,它仍处于 alpha 阶段,因此不要依赖它来存储关键数据。

当然,有些东西是无法恢复的,比如打开的文件句柄。但是你可以非常接近。

【讨论】:

  • 最近的改进:dill 现在可以腌制打开的文件句柄(参见dill on github);但是,如果您想要文件内容,则将内容传递给也可以序列化的 StringIO。
  • 整洁!它会恢复您在文件中的位置并重新打开文件吗?
  • 是的。它复制文件指针,以便您将在文件中的相同位置,假设在此期间文件没有发生任何奇怪的事情。它还处理已关闭的文件句柄、stdin/stdout/stderr 和临时文件……失败,尝试为 devnull 构建文件句柄……失败则抛出 UnpicklingError。不确定这是否是最好的失败行为,但这就是现在的情况。
  • ...好吧,显然,因为 3.2 腌制某些文件句柄现在更严格地不允许。 get_state 方法已设置为对io 模块中的许多派生文件对象抛出错误。所以,从 3.2 到现在,io 的部分内容又回到了绘图板上。 在此处插入悲伤的表情。
  • gossamer-threads.com/lists/python/bugs/871199 ...以及最新版本的 2.6.x 和 2.7.x。显然,一个人的“错误修复”是另一个人的“错误”。
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 2023-02-22
  • 2018-07-05
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
相关资源
最近更新 更多