我有一堆用
导入的类创建的对象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
)。