我有一堆从导入的类创建的对象
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))
我发现这种方式真的很复杂,我想知道:有没有更蟒蛇的方式来实现这一点?
注意:所有这些都发生在 Python 2.7.10、dill 0.2.6 中。所有要序列化的对象都是新型对象(继承自object
)。