Python3.7导入Python3.8生成pkl文件报pickle协议5不支持错误求助
问题修复方案
报错根因:Python 3.8+默认使用pickle协议5序列化文件,而Python3.7原生pickle库不支持该协议。你虽然提前导入了pickle5,但pd.read_pickle默认调用pandas内置的pickle依赖,不会使用你手动导入的pickle5,因此报错没有解决。
本地Python3.7环境修复步骤
- 第一步:先确认已经安装pickle5依赖,未安装可执行命令:
pip install pickle5 - 第二步:修改读取pkl文件的代码逻辑,改用pickle5手动读取文件,修改后的完整代码如下:
import pandas as pd import matplotlib.pyplot as plt import numpy as np import pickle5 as pickle # 改用pickle5手动读取pkl文件 with open("Energy_data.pkl", "rb") as f: output = pickle.load(f) plt.figure() # print(output) output.plot()
可选长期解决方案
如果可以联系到生成该pkl文件的同事,可让对方导出pkl时指定兼容Python3.7的协议版本,后续所有环境都可以直接读取,示例导出代码:
# 同事侧导出时指定protocol=4即可兼容Python3.7及以上版本 df.to_pickle("Energy_data.pkl", protocol=4)
内容的提问来源于stack exchange,提问作者marv_97
相关产品推荐
相关产品推荐

