【问题标题】:How to pickle a namespace in python如何在python中腌制命名空间
【发布时间】:2018-08-22 13:41:28
【问题描述】:

有没有办法使用 pickle 保存和加载整个命名空间,让我可以执行以下操作:

import pickle
import numpy as np
a = 1
# other arbitrary code
pickle.dump(namespace,open('my_namespace.p','wb')

允许打开一个新的 python 提示并执行以下代码:

import pickle
namespace.update(pickle.load(open('my_namespace.p','rb'))
print(np.array(a)+1)
>>2
# using the rest of the namespace

【问题讨论】:

  • 这不太可能正常工作,因为您的命名空间很容易包含不可腌制的对象。有一个扩展的 pickle 替代品叫做 dill (pypi.org/project/dill),它列出了“保存和加载 python 解释器会话”作为它的功能之一,尽管我没有使用它的经验。
  • namespace 是什么意思?
  • 我想知道你想在这里实现什么?为什么要腌制整个模块(除非我弄错了 Python 中没有命名空间这样的概念)?
  • 这个想法是能够保存具有所有变量和导入的代码的某个状态,以便进入和重新进入相​​同的状态进行实验。也只是想进一步了解python环境。

标签: python pickle


【解决方案1】:

如果您打算“冻结”您使用的模块的特定代码版本,我建议您查看Python Virtual Environment (venv)。否则,正如 jasonharper 所建议的那样 - 它不太可能很好地工作(特别是像 NumPy 这样的模块,它们是 Python 代码和二进制库的复杂组合)。

venv 也将帮助您处理该特定问题。

【讨论】:

    【解决方案2】:

    我想我明白了。您希望能够恢复所有变量并在不同的解释器中或在不同的时间与 shell 交互。最简单的方法可能是使用像 jupyter 或 ipython 这样的笔记本。这些允许您保存所有运行的命令并重新构建它们。很抱歉这不是一个直接的答案,但我认为它可能会“等效地完成”您指定的内容。

    【讨论】:

      猜你喜欢
      • 2012-04-26
      • 1970-01-01
      • 2010-12-13
      • 2018-07-02
      • 1970-01-01
      • 2012-01-12
      • 2013-04-28
      相关资源
      最近更新 更多