当使用pickle.load时出现导入错误:未找到"utils"模块。

5

我首先使用pickle.dump将一些东西转储到pickle文件中。在utils.load_data中,我的项目层次结构如下所示:

project1
  -utils
     -__init__.py
     -load_data.py
  -data
  (other folder...)

接着它会将一个pickle文件输出到data文件夹。然后我将.pickle文件移动到另一个项目中,该项目的层次结构为

project2
   -data
   -main.py

当我在main.py中运行pickle.load()操作时,它提示了标题中的错误。但是,如果我将main.py移回project1文件夹,则错误消失了。因此,问题必须来自文件本身。
我的问题是:为什么pickle尝试从它诞生的地方导入包?有人能分享一个好的解释吗?我感到相当困惑。
1个回答

9

默认情况下,反序列化将导入pickle数据中找到的任何类。这意味着如果您已将自定义类pickle化并在某个地方进行了反序列化,则pickle将尝试导入模块(在本例中为utils)。因此,您需要在project2文件夹中拥有utils模块。

有关更多信息,请查看此文档


如果这个答案有用的话,你可以接受它。这会帮助其他人发现这个答案。 - Atul
1
这是我在这个主题上能找到的最佳答案! - Craig
1
非常感谢您的回答,它对我帮助很大,在stackoverflow上进行了大量探索之后! - Baptiste ZLOCH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接