Python 3.x Python3无法pickle自定义对象

Python 3.x Python3无法pickle自定义对象,python-3.x,pickle,Python 3.x,Pickle,在将项目从Python2移动到Python3之后,我再也不能对自己的对象进行pickle。重申一下,在Python2.7.2中,我没有遇到任何问题 _pickle.PicklingError: Can't pickle <class 'mtgt.MTGTree'>: import of module 'mtgt' failed 我在/usr/lib/python3/dist包中有一个lituus.pth文件,因此我可以在任何目录下的命令提示符下运行python3并导入我的项目文件

在将项目从Python2移动到Python3之后,我再也不能对自己的对象进行pickle。重申一下,在Python2.7.2中,我没有遇到任何问题

_pickle.PicklingError: Can't pickle <class 'mtgt.MTGTree'>: import of module 'mtgt' failed
我在/usr/lib/python3/dist包中有一个lituus.pth文件,因此我可以在任何目录下的命令提示符下运行python3并导入我的项目文件

我想pickle mtgt.py中定义的MTGTree对象。现在,如果我从包含mtgt的目录运行python3并导入mtgt,我将转储该对象

>>> import mtgt
>>> import pickle
>>> fout = open('test.pkl','wb')
>>> pickle.dump(t,fout)
>>> fout.close()
>>> exit()
>>> import mtgt
>>> import pickle
>>> fin = open('test.pkl','rb')
>>> t = pickle.load(fin)
>>> t.root
'root'
>>> fin.close()
>>> exit()
然后加载对象

>>> import mtgt
>>> import pickle
>>> fout = open('test.pkl','wb')
>>> pickle.dump(t,fout)
>>> fout.close()
>>> exit()
>>> import mtgt
>>> import pickle
>>> fin = open('test.pkl','rb')
>>> t = pickle.load(fin)
>>> t.root
'root'
>>> fin.close()
>>> exit()
而且,我甚至可以在任何地方运行python3并加载腌制树

>>> import lituus.mtgl.mtgt as mtgt
>>> import pickle
>>> fin = open('test.pkl','rb')
>>> t=pickle.load(fin)
>>> fin.close()
>>> t.root
'root'
>>> exit()
当我尝试将
import.mtgl.mtgt作为mtgt

>>> import lituus.mtgl.mtgt as mtgt
>>> import pickle
>>> t = mtgt.MTGTree()
>>> t.root
'root'
>>> fout = open('test.pkl','wb')
>>> pickle.dump(t,fout)
这导致了上述情况 _pickle.PicklingError:无法pickle:导入模块“mtgt”失败

很明显我做错了什么但是WTF?这在Python2.7中可以正常工作,并且使用pickle加载pickle文件也没有问题


我找不到任何具体的东西,希望亚尔的其中一个有一些见解。谢谢。

[SOLVED]因此,在我的python文件中,我为
模块设置了一个变量列表。其中之一是
\uuuu name\uuuuu
。评论完这一点后,酸洗效果很好。我想我犯了一个愚蠢的错误,但Python 2.7没有任何问题仍然困扰着我