【问题标题】:python cPickle import errorpython cPickle导入错误
【发布时间】:2014-06-30 19:09:00
【问题描述】:

我正在尝试运行一个 python 项目。部分代码使用以下代码调用序列化程序:

try:
    fo = open(data_file, "rb")
except IOError:
    print "Couldn't open data file: %s" % data_file
    return
try:
    myobject = pickle.load(fo)
except:
    fo.close()
    print "Unexpected error:", sys.exc_info()[0]
    raise

fo.close()
return myobject

当这部分代码运行时,我得到一个错误

myobject = pickle.load(fo)

错误是:

myobject = pickle.load(fo)
File "/cs/local/lib/pkg/epd-7.3.1/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/cs/local/lib/pkg/epd-7.3.1/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
File "/cs/local/lib/pkg/epd-7.3.1/lib/python2.7/pickle.py", line 1090, in load_global
klass = self.find_class(module, name)
File "/cs/local/lib/pkg/epd-7.3.1/lib/python2.7/pickle.py", line 1124, in find_class
__import__(module)
ImportError: No module named label

我看过:Import Error using cPickle in Python 但我不能使用任何解决方案,因为:

  1. “您可以二进制打开文件并将选项替换为您替换旧模块选项的模块。” => 我不知道解决方案指的是哪个二进制文件。我的包中似乎没有任何二进制文件。

  2. 在我的包中,我没有一个名为 label 的模块来导入它。

    我很迷茫,如果有任何帮助和建议,我将不胜感激。

【问题讨论】:

  • 你想解开什么对象?你能显示文件的内容吗?
  • 您为什么不能完全使用该答案中提出的任何解决方案?
  • data_file 似乎是 2 个 .dat 文件。
  • 谁创建了腌制文件?是你吗?
  • 没有。我没有创建任何文件或代码。我得到了整个包,我被告知它运行良好,但它给了我这个错误。

标签: python pickle


【解决方案1】:

当pickle序列化一个对象时,它通过引用序列化模块。因此,如果您有一个函数或其他一些具有调用堆栈的 python 对象,它可能引用模块label,但找不到该模块。如果你有一个序列化的类、类实例、函数,或者特别是一个闭包……你可能在用于构建该对象的源代码中有一个import label。腌制对象是 python 的一组指令,用于将二进制信息位转换为 python 对象。如果缺少某些位,例如模块...(pickle 再次通过引用存储它),那么您的 unpickle 将失败。

您可以尝试安装label 模块,或者您可以要求序列化对象的一方使用序列化模块本身序列化它而不是通过引用来序列化它。我认为您可以使用dill 序列化程序来做到这一点。

如果序列化对象的人在他们的globals 中有label,并且有一个正在序列化的闭包,pickle 将所有内容都包含在全局变量中……所以它甚至可能不相关,但你需要它来反序列化物体。您还可以要求序列化程序重新腌制,该序列化程序对包含全局变量更加谨慎,例如 dillcloudpickle

这基本上就是Import Error using cPickle in Python 以一种不太笼统的方式表达的意思。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2013-03-19
    • 1970-01-01
    • 2016-04-28
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多