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.
我有一个 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.