Fix error: Cannot load pickle file from other machine

Fix error: Cannot load pickle file from other machine

我有一个 pickle 文件需要从另一个项目加载。似乎那个项目的文件夹结构有点不同。即:模型 class 是在 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

不过好像不行。请帮我解决这个问题。

谢谢

pickler 期望能够找到 __main__.FraudModel,因此您只需修改 python 环境,使其看起来像对象最初被 pickle 时的样子。

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

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

然后您可以解开文件,它应该会找到 class.