[英]Pickle file works on one machine and doesn't work when opened on other
我在通过 ssh 连接的集群上远程工作。 我在那里运行一些任务,然后我使用 pickle 来保存这样的对象:
with open('tst.pkl','wb') as g:
pickle.dump(pkl_pack, g)
然后当我仍然在集群上时,我运行 python 并输入
with open('tst.pkl','rb') as f:
pkl_pack = pickle.load(f)
一切都很好。 当我将 .pkl 文件 scp 到我的私人计算机时出现问题
scp name@cluster:~/path/tst.pkl ./
然后我运行与我在集群上使用的相同版本的 python (python.3.5.2) 并执行相同的命令
with open('tst.pkl','rb') as f:
pkl_pack = pickle.load(f)
但在我的机器上它产生一个错误:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "stringsource", line 15, in tenpy.linalg.np_conserved.Array.__setstate_cython__
TypeError: Expected tuple, got dict
在这里我不能再处理数据了。
在集群和我的私人计算机上,我都有相同版本的 python 以及我使用的库(tenpy)。
如果我尝试以相反的方式执行此操作(保存在我的计算机上并在群集上还原),则会发生同样的情况,但是错误是不同的:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: Can't get attribute '__pyx_unpickle_Array' on <module 'tenpy.linalg.np_conserved' from '/home/pwojcik/usr/lib/TeNPy/tenpy/linalg/np_conserved.py'>
在加载泡菜文件之前导入库没有帮助。
编辑
tenpy 库允许检查版本:
>>> print(tenpy.__full_version__)
b'v0.3.0\n' using python 3.5.2 (default, Aug 2 2018, 16:42:25)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] with numpy 1.15.0, scipy 1.1.0
并且 GCC 在我的电脑上有所不同
>>> print(tenpy.__full_version__)
b'v0.3.0\n' using python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] with numpy 1.15.0, scipy 1.1.0
编辑二
我现在已经更新了集群上的 GCC 版本
>>> print(tenpy.__full_version__)
b'v0.3.0\n' using python 3.5.2 (default, Aug 7 2018, 10:27:13)
[GCC 5.4.0] with numpy 1.15.0, scipy 1.1.0
但泡菜仍然产生相同的错误。
编辑三
Pickle 版本:据我所知,pickle 与我的 python 版本相同。 命令
$ pip3 freeze | grep pickle
在我的电脑上执行时,我得到了
cloudpickle==0.5.3
pickleshare==0.7.4
集群上什么也没有。 所以我在集群上安装了上述包
pip3 install cloudpickle
pip3 install pickleshare
但问题仍然存在。 我还用 matplotlib.pyplot 进行了泡菜测试
import matplotlib.pyplot as plt
import pickle
data = plt.plot([0],[1])
with open('plot.pkl','wb') as g:
pickle.dump(data,g)
在集群上准备了一个文件“plot.pkl”,scp-ied 到我的计算机,在那里我能够使用 pickle 恢复它而没有任何错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.