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

2024-05-14 13:23:32 发布

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

我正在尝试从RLLib(json didn't work as shown in this post)还原一个pickle配置文件,并出现以下错误:

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中打开此文件


Tags: pathinconfigjsonasloadparamsopen
3条回答

如果由于pickle5的依赖性(主要是Visual Building c++)而无法加载它,另一个解决方案可能是更改正在使用的Python解释器(在错误发生之前,将其更改为旧的解释器)。对我来说,我在空闲状态下运行了一个在Spyder中运行的程序后,出现了这个错误。当我在Spyder中再次运行它时,它放弃了这个错误

Python Error: Unsupported Pickle Protocol 5 

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

pip install spyder-kernels

当然,这可能会在Spyder中引入一些不规则性(即,由于解释器不同,它应该附带的包不再存在)。在调试时应该很容易地使用它们,并使用标准pip安装解决这些问题

一旦恢复了(被认为丢失的)文件,最好考虑恢复到Spyder的Python解释器,并更新代码以优雅地处理此问题(如果有人能在注释中建议如何执行此操作,而不需要pickle5,我会很高兴!)

对于在python 3.8中使用协议5将数据帧保存到pickle文件并需要将其加载到仅支持协议4的python 3.6中的pandas用户(我正在查看您的google colab):

!pip3 install pickle5
import pickle5 as pickle
with open(path_to_protocol5, "rb") as fh:
  data = pickle.load(fh)

还可以从Python3.6保存到protocol-4 pickle中

data.to_pickle(path_to_protocol4)

更新:如果从stable-baselines3加载模型时遇到此问题:

!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年5月31日使用env进行测试:

cloudpickle: 1.6.0
pickle5: 0.0.11 
stable-baselines3: 1.0

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

使用pickle5或将其加载到Python3.8+中,然后使用protocol参数将其序列化到较低版本

相关问题 更多 >

    热门问题