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

Python 3.7错误:不支持的Pickle协议5,python,pickle,Python,Pickle,我正在尝试从RLLib()还原一个pickle配置文件,并出现以下错误: config = pickle.load(open(f"{path}/params.pkl", "rb")) --------------------------------------------------------------------------- ValueError Traceback (most rec

我正在尝试从RLLib()还原一个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

config=pickle.load(打开(f“{path}/params.pkl”,“rb”))
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
---->1 config=pickle.load(打开(f“{path}/params.pkl”,“rb”))
ValueError:不支持的pickle协议:5
Python版本=3.7.0


如何在3.7中打开此文件?

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

对于在python 3.8中使用协议5将数据帧保存到pickle文件并需要将其加载到仅支持协议4的python 3.6中的熊猫用户(我看着你谷歌colab):

还可以从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

参考:

如果由于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,我会很高兴!)

如果此错误是由于heroku部署引起的,请检查本地安装程序和heroku安装程序的python版本。 如果两者不同,则可能导致此错误。
解决方案:

  • 在应用程序的基本目录中创建runtime.txt文件
然后在runtime.txt中提及您的本地python版本,这样就不会有冲突

python-3.9.2

你知道这个文件保存在哪个版本吗?不幸的是,我不知道。不过我正在努力追踪。我不知道pickle5!我正在设置一个3.8虚拟环境并安装所有依赖项,但这要容易得多。谢谢!我只是自己找到的。PyPi需要更好地宣传自己。ModuleNotFoundError:不虽然我导入了名为“pickle5”的模块。一个使用pandas数据帧序列化到较低版本的具体示例:df.to_pickle('filename.pkl',protocol=4)@Nir正是我需要的,谢谢!非常感谢!!非常有用!!
python-3.9.2