Pickle ImportError:没有名为“builtin”的模块__

2024-05-23 15:00:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python3.6中加载一个(复制的)pickle对象,当我这样做时,__builtin__\r会出现一个导入错误。在

with open('FilePath/FileName.pkl', "rb") as file:
    file = pickle.load(file)
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-36-b39fbab9bab4> in <module>()
      1 with open('FilePath/FileName.pkl', "rb") as file:
----> 2     file = pickle.load(file)

ModuleNotFoundError: No module named '__builtin__\r'

当我在Python2.7中尝试相同的操作时,我再次遇到导入错误,对于__builtin__模块:

---------------------------------------------------------------------------

ImportError                               Traceback (most recent call last)
<ipython-input-3-12ac6524bf1a> in <module>()
      1 with open('FilePath/FileName.pkl', "rb") as file:
----> 2     file = pickle.load(file)

/Users/manasa.bulusu/anaconda2/lib/python2.7/pickle.pyc in load(file)
   1382 
   1383 def load(file):
-> 1384     return Unpickler(file).load()
   1385 
   1386 def loads(str):

/Users/manasa.bulusu/anaconda2/lib/python2.7/pickle.pyc in load(self)
    862             while 1:
    863                 key = read(1)
--> 864                 dispatch[key](self)
    865         except _Stop, stopinst:
    866             return stopinst.value

/Users/manasa.bulusu/anaconda2/lib/python2.7/pickle.pyc in load_global(self)
   1094         module = self.readline()[:-1]
   1095         name = self.readline()[:-1]
-> 1096         klass = self.find_class(module, name)
   1097         self.append(klass)
   1098     dispatch[GLOBAL] = load_global

/Users/manasa.bulusu/anaconda2/lib/python2.7/pickle.pyc in find_class(self, module, name)
   1128     def find_class(self, module, name):
   1129         # Subclasses may override this
-> 1130         __import__(module)
   1131         mod = sys.modules[module]
   1132         klass = getattr(mod, name)

ImportError: No module named __builtin__

我导入了builtins(py3.6)和{}(py2.7),但这并没有停止抛出完全相同的错误。
这里的实际问题是什么?而且,__builtin__\r在py36中甚至看起来不是一个真正的包。在


Tags: nameinselflib错误loaduserspickle
1条回答
网友
1楼 · 发布于 2024-05-23 15:00:56

这看起来像是在Windows(和python2)上以文本模式编写pickle。使用文本模式不是一个好主意,因为\n->;\r\n转换会使这种pickle在非Windows或python3上无法读取。在

以二进制模式读取数据,并在loads之前调用.replace(b'\r\n', b'\n'),这可能允许您加载数据,就像在python2上的Windows上重新加载数据并以二进制模式重新调用它一样。在

相关问题 更多 >