【问题标题】:Python: pickle creates module import errorPython:pickle 创建模块导入错误
【发布时间】:2023-03-26 16:08:01
【问题描述】:

我有一个使用我已经运行了数周的 pickle 的 python 脚本。我最近安装了dropbox,这样我就可以在机器A上运行脚本,将数据腌制到dropbox,然后将数据从dropbox加载到机器B上。所以,我曾经写入脚本路径中的文件,现在我写入由 Dropbox 同步的单独文件。

当我去加载数据时,我收到以下错误:

data = pickle.load(f)
ModuleNotFoundError: No module named 'pandas._libs'

但是,前面的这行工作正常:

import pandas as pd

事实上,如果我运行转储(而不是加载)数据的脚本,它也会成功运行。

我还使用 sys.path 验证了路径是否正确。

可能是什么问题?

【问题讨论】:

  • 它是从 pickle.load(f) 中调用的
  • @SamCraig:不,pickle 通过(模块,名称)引用加载对象。您不存储类型的来源,您只需存储下次可以加载它的位置。
  • @SamCraig:但在这种情况下,一个对象被腌制,表明它位于pd._libs 模块中。显然该模块在另一台机器上不可用。
  • 这让我相信这可能是 Pandas 版本的问题..

标签: python pandas import pickle


【解决方案1】:

如 cmets 中所述,这是 pandas 版本问题。您的 pickle 文件是通过 pickle 包含较新版本或 pandas 的对象创建的,并且取消该文件的系统包含 pandas 的旧版本。

更准确地说,pandas._libs最早出现在:

提交 648ae4f03622d8eafe1ca3b833bd6a99f56bece4 作者:杰夫·雷贝克 日期:2017年3月7日星期二18:21:18 -0500

BLD:合并剩余的扩展 将扩展移动到 pandas/_libs,其中包含扩展代码 以及生成的构建(作为可导入的)。

... 首次出现在 0.20 版本中。按理说你的pickle文件是用pandas >= 0.20的版本创建的,而unpickle系统的版本是

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2012-07-14
    • 2023-03-03
    • 2017-12-26
    • 2015-08-24
    相关资源
    最近更新 更多