【问题标题】:Fix error: Cannot load pickle file from other machine修复错误:无法从其他机器加载泡菜文件
【发布时间】:2025-11-25 10:55:01
【问题描述】:

我有一个需要从另一个项目加载的泡菜文件。该项目的文件夹结构似乎有些不同。即:模型类是在main中定义的,但在我的项目中,它放在“model.fraud_model.py”中。所以当我尝试加载泡菜文件时,我得到了这个异常:

'module' object has no attribute 'FraudModel'

我正在尝试从此修改泡菜文件:

ccopy_reg
_reconstructor
p0
(c__main__
FraudModel

到这里:

ccopy_reg
_reconstructor
p0
(cmodel.fraud_model
FraudModel

而且它有效。但是这个解决方案会改变泡菜文件。我不想要这个。所以我手动导入:

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

但它似乎不起作用。请帮我解决这个问题。

谢谢

【问题讨论】:

  • @BlownhitherMa 我已经编辑了我的帖子。实际上我以前做过。但是还是不行。
  • 可能是sys.modules['FraudModel'] = FraudModel ,因为那是缺少的属性?

标签: python pickle


【解决方案1】:

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

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

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

然后你可以解压文件,它应该会找到类。

【讨论】:

  • 谢谢。它有效:D 我可以问 2 个问题吗:1)我们应该在 unpickle 之后“卸载”吗? 2)生成pickle文件的代码如何解决这个问题? (即:硬编码模块)。谢谢。
最近更新 更多