Pickle动态导入的类

时间:2017-06-15 06:43:24

标签: python python-2.7 serialization dynamic-loading dill

我有一堆用

导入的类创建的对象
module = imp.load_source(packageName, packagePath)

我需要腌制。只要packagePath直接位于Python路径或工作目录中,它就完美无缺。

但是一旦我把它移到其他地方,我就会感到害怕

ImportError: No module named test_package

我尝试添加一个__reduce__方法,该方法将类作为第一个值返回。我尝试使用dill,它应该可以序列化完整的类,而不是对类的简单引用(我尝试将它与__reduce__结合使用)。

它目前的工作方式是将它们与包装路径一起进行双重挑选,该对象负责导入包:

class Container(object):

    def __init__(self, packagePath, packageName, objectsDump= None):
        self.package = imp.load_source(packageName, packagePath)
        self.packagePath = packagePath
        self.packageName= packageName
        if objectsDump is not None:
            self.objects = dill.loads(objectsDump)

    def __reduce__(self):
        return (self.__class__,
               (self.packagePath, self.packageName, dill.dumps(self.objects))

我发现这种方式真的很复杂,我想知道:是否有更多的pythonic方式来实现这一目标?

注意:所有这些都发生在Python 2.7.10,dill 0.2.6中。所有要序列化的对象都是新式对象(继承自object)。

0 个答案:

没有答案