OpenAI Gym在GCE Docker容器中运行报contextlib无nullcontext属性错误
报错引发原因
contextlib.nullcontext 是Python 3.7版本才正式加入Python标准库的上下文管理工具,从报错堆栈的依赖路径/home/selfplay/.local/lib/python3.6/site-packages/可以确认你当前运行环境为Python 3.6,缺少该接口。触发报错的直接原因是你安装的gym版本过高,高版本gym已经停止对Python 3.6的兼容,内部直接调用了contextlib.nullcontext接口。
可行解决办法
- 方案1:升级Python运行环境
将Docker容器内的Python版本升级到3.7及以上,重新安装所有项目依赖即可,该方案兼容性最好,可避免后续出现其他版本兼容问题。 - 方案2:降级gym到兼容Python3.6的版本
执行以下命令安装最后一个支持Python3.6的gym正式版本:
降级后即可直接解决接口不存在的报错。pip install gym==0.25.2 - 方案3:手动添加兼容代码(临时应急使用)
不需要修改依赖版本,在你的项目入口文件train.py的最开头添加如下兼容代码,手动为低版本Python补全nullcontext实现:import contextlib # 兼容Python3.6缺少nullcontext的问题 if not hasattr(contextlib, "nullcontext"): class nullcontext: def __init__(self, enter_result=None): self.enter_result = enter_result def __enter__(self): return self.enter_result def __exit__(self, *exc_info): pass contextlib.nullcontext = nullcontext
内容的提问来源于stack exchange,提问作者Antoine Vo
相关产品推荐
相关产品推荐

