腌制动态导入的类

Nat*_*ini 5 python serialization dynamic-loading python-2.7 dill

我有一堆从导入的类创建的对象

module = imp.load_source(packageName, packagePath)
Run Code Online (Sandbox Code Playgroud)

我要泡菜 只要packagePath直接在Python路径或工作目录中,一切都可以完美工作。

但是一旦我将其移动到其他地方,我就会感到恐惧

ImportError: No module named test_package
Run Code Online (Sandbox Code Playgroud)

我尝试添加一种__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))
Run Code Online (Sandbox Code Playgroud)

我发现这种方式确实令人费解,我想知道:是否有更Python化的方式来实现这一目标?

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