修复错误:无法从其他计算机加载pickle文件

时间:2018-04-26 16:28:08

标签: python pickle

我有一个需要从另一个项目加载的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

但似乎行不通。请帮我解决这个问题。

由于

1 个答案:

答案 0 :(得分:2)

pickler希望能够找到__main__.FraudModel,所以你只需要修改python环境,看起来就像最初对象被腌制时一样。

你应该可以通过将类添加到__main__模块来实现,每个python程序都有这个模块

from model.fraud_model import FraudModel
import sys
sys.modules['__main__'].FraudModel = FraudModel

然后你可以解开文件,它应该找到这个类。