我有一个需要从另一个项目加载的pickle文件。似乎该项目的文件夹结构有点不同。即:模型类是在main中定义的,但在我的项目中,它放入" model.fraud_model.py"。所以当我尝试加载pickle文件时,我得到了这个例外:
'module' object has no attribute 'FraudModel'
我试图修改pickle文件:
ccopy_reg
_reconstructor
p0
(c__main__
FraudModel
对此:
ccopy_reg
_reconstructor
p0
(cmodel.fraud_model
FraudModel
它有效。但是这个解决方案会改变pickle文件。我不想要这个。所以我手工导入:
from model.fraud_model import FraudModel
import sys
sys.modules['model.fraud_model'] = FraudModel
但似乎行不通。请帮我解决这个问题。
由于
答案 0 :(得分:2)
pickler希望能够找到__main__.FraudModel
,所以你只需要修改python环境,看起来就像最初对象被腌制时一样。
你应该可以通过将类添加到__main__
模块来实现,每个python程序都有这个模块
from model.fraud_model import FraudModel
import sys
sys.modules['__main__'].FraudModel = FraudModel
然后你可以解开文件,它应该找到这个类。