Python 3.7 Error: Unsupported Pickle Protocol 5
Python 3.7 Error: Unsupported Pickle Protocol 5
我正在尝试从 RLLib (json didn't work as shown in this post) 恢复一个 pickled 配置文件,并收到以下错误:
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 中打开此文件?
使用pickle5或者载入python3.8+,然后使用protocol参数序列化为低版本
对于 pandas 在 python 3.8 中使用协议 5 将数据帧保存到 pickle 文件并需要将其加载到仅支持协议 4 的 python 3.6 的用户(我'我看着你 google colab):
!pip3 install pickle5
import pickle5 as pickle
with open(path_to_protocol5, "rb") as fh:
data = pickle.load(fh)
也可以从 python 3.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-05-31 测试环境:
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 的依赖性(主要是 Visual Building c++)而无法加载 pickle5,另一种解决方案可能是您更改正在使用的 Python 解释器(更改为旧解释器,在发生了错误)。对我来说,在我 运行 一个我在 Spyder 中 运行 的 IDLE 程序之后,我得到了这个错误。当我在 Spyder 中再次 运行 它时,它丢弃了这个错误。
Python Error: Unsupported Pickle Protocol 5
为了解决这个问题,我在 Spyder 中将我的 Python 解释器更改为我在 IDLE 中使用的 Python(工具 -> 首选项)。重新启动 Spyder 后,我必须使用命令提示符安装必要的依赖项,以便在 Spyder 中可以使用控制台:
pip install spyder-kernels
自然地,这可能会在 Spyder 中引入一些异常(即,由于不同的解释器,它应该附带的包不再存在)。这些应该在调试时很容易被弄清楚,并使用标准 pip 安装解决。
一旦你恢复了你的(被认为丢失的)文件,考虑恢复到 Spyder 的 Python 解释器并更新代码以优雅地处理这个问题可能是明智的(如果有人可以,我会很高兴在评论中建议如何做到这一点不需要 pickle5!)
如果此错误是由于 heroku 部署 引起的,请检查您的 python 版本的本地设置和 heroku 设置。
如果两者不同,则可能会导致您出现此错误。
解决方案:
- 在应用程序的基目录中创建一个 runtime.txt 文件
然后在你的 runtime.txt 中提及你的本地 python 版本,这样就不会有冲突。
python-3.9.2
我正在尝试从 RLLib (json didn't work as shown in this post) 恢复一个 pickled 配置文件,并收到以下错误:
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 中打开此文件?
使用pickle5或者载入python3.8+,然后使用protocol参数序列化为低版本
对于 pandas 在 python 3.8 中使用协议 5 将数据帧保存到 pickle 文件并需要将其加载到仅支持协议 4 的 python 3.6 的用户(我'我看着你 google colab):
!pip3 install pickle5
import pickle5 as pickle
with open(path_to_protocol5, "rb") as fh:
data = pickle.load(fh)
也可以从 python 3.6
保存到 protocol-4 pickledata.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-05-31 测试环境:
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 的依赖性(主要是 Visual Building c++)而无法加载 pickle5,另一种解决方案可能是您更改正在使用的 Python 解释器(更改为旧解释器,在发生了错误)。对我来说,在我 运行 一个我在 Spyder 中 运行 的 IDLE 程序之后,我得到了这个错误。当我在 Spyder 中再次 运行 它时,它丢弃了这个错误。
Python Error: Unsupported Pickle Protocol 5
为了解决这个问题,我在 Spyder 中将我的 Python 解释器更改为我在 IDLE 中使用的 Python(工具 -> 首选项)。重新启动 Spyder 后,我必须使用命令提示符安装必要的依赖项,以便在 Spyder 中可以使用控制台:
pip install spyder-kernels
自然地,这可能会在 Spyder 中引入一些异常(即,由于不同的解释器,它应该附带的包不再存在)。这些应该在调试时很容易被弄清楚,并使用标准 pip 安装解决。
一旦你恢复了你的(被认为丢失的)文件,考虑恢复到 Spyder 的 Python 解释器并更新代码以优雅地处理这个问题可能是明智的(如果有人可以,我会很高兴在评论中建议如何做到这一点不需要 pickle5!)
如果此错误是由于 heroku 部署 引起的,请检查您的 python 版本的本地设置和 heroku 设置。
如果两者不同,则可能会导致您出现此错误。
解决方案:
- 在应用程序的基目录中创建一个 runtime.txt 文件
然后在你的 runtime.txt 中提及你的本地 python 版本,这样就不会有冲突。
python-3.9.2