首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python 3.7错误:不支持的Pickle协议5

Python 3.7错误:不支持的Pickle协议5
EN

Stack Overflow用户
提问于 2020-08-09 18:03:04
回答 4查看 143.8K关注 0票数 79

我正在尝试从RLLib (json没有像这篇文章所显示的那样工作)恢复一个带泡菜的配置文件,并得到以下错误:

代码语言:javascript
运行
复制
config = pickle.load(open(f"{path}/params.pkl", "rb"))

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-28-c964561b863c> in <module>
----> 1 config = pickle.load(open(f"{path}/params.pkl", "rb"))

ValueError: unsupported pickle protocol: 5

Python版本= 3.7.0

如何在3.7中打开此文件?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-08-09 18:08:10

使用pickle5或将其加载到python 3.8+中,然后使用协议参数将其序列化到较低的版本。

票数 60
EN

Stack Overflow用户

发布于 2020-12-16 07:18:47

对于将数据保存到python3.8中带有协议5的泡菜文件并只支持协议4的python3.6(我正在看google )的熊猫用户:

代码语言:javascript
运行
复制
!pip3 install pickle5
import pickle5 as pickle
with open(path_to_protocol5, "rb") as fh:
  data = pickle.load(fh)

还可以保存到python 3.6中的协议-4泡菜中。

代码语言:javascript
运行
复制
data.to_pickle(path_to_protocol4)

更新:如果在从稳定数据库3加载模型时面临这种情况:

代码语言:javascript
运行
复制
!pip install --upgrade --quiet cloudpickle pickle5
from stable_baselines3 import PPO
# restart kernel if in jupyter notebook

# Might not need this dict in all cases
custom_objects = {
    "lr_schedule": lambda x: .003,
    "clip_range": lambda x: .02
}
model = PPO.load("path/to/model.zip", custom_objects=custom_objects)

在2021-05-31上用env测试:

代码语言:javascript
运行
复制
cloudpickle: 1.6.0
pickle5: 0.0.11 
stable-baselines3: 1.0

参考资料:https://brainsteam.co.uk/2021/01/14/pickle-5-madness-with-mlflow/

票数 102
EN

Stack Overflow用户

发布于 2021-02-22 16:13:04

如果由于pickle5的依赖关系(主要是Visual )而无法加载pickle5,另一种解决方案可能是在错误发生之前更改所使用的Python解释器(改为旧的)。对我来说,在运行一个在Spyder中运行的空闲程序之后,我得到了这个错误。当我在Spyder中再次运行它时,它删除了这个错误。

代码语言:javascript
运行
复制
Python Error: Unsupported Pickle Protocol 5 

为了解决这个问题,在Spyder中,我将我的Python解释器更改为与IDLE一起使用的Python (Tools -> Preferences)。重新启动Spyder之后,必须使用命令提示符安装必要的依赖项,以便在Spyder中使用控制台:

代码语言:javascript
运行
复制
pip install spyder-kernels

当然,这可能会在Spyder中引入一些不正常的地方(也就是说,它应该附带的包由于解释器不同而不再存在)。在调试时,这些问题应该很容易解决,并使用标准的pip安装来解决。

一旦您恢复了您的文件(被认为丢失了),最好考虑恢复到Spyder的Python解释器,并更新代码以优雅地处理这个问题(如果有人能在评论中建议不需要pickle5!)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63329657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档