如何解决运行《Deep Reinforcement Learning Hands-On》中强化学习代码时出现的'module 'gym.wrappers' has no attribute 'Monitor''错误?
解决 'gym.wrappers' has no attribute 'Monitor' 错误
这个问题很常见,核心原因是Gym版本迭代后,原有的Monitor wrapper的位置和实现逻辑发生了变更:从Gym v0.26版本开始,官方移除了gym.wrappers.Monitor,替换成了功能更灵活的RecordVideo wrapper;另外,目前多数开发者转用官方维护的分支gymnasium(原OpenAI Gym的后续项目),这个分支里也不存在Monitor组件。
下面分两种场景给出针对性解决方案:
场景1:使用Gym v0.26+ 或 gymnasium(推荐)
直接替换为官方推荐的RecordVideo wrapper即可,修改后的代码适配了新版本的API规范:
import gym # 如果你安装的是gymnasium,替换为 import gymnasium as gym if __name__ == "__main__": # 必须指定render_mode为rgb_array,否则无法录制视频 env = gym.make("CartPole-v0", render_mode="rgb_array") # 初始化RecordVideo wrapper,设置保存目录和录制触发条件(这里每集都录制) env = gym.wrappers.RecordVideo( env, video_folder="recording", episode_trigger=lambda episode_id: True ) total_reward = 0.0 total_steps = 0 # Gym v0.26+ 和 gymnasium的reset返回(观测值, 信息)元组 obs, _ = env.reset() while True: action = env.action_space.sample() # step返回值新增了truncated参数,用于判断是否因超时终止 obs, reward, done, truncated, _ = env.step(action) total_reward += reward total_steps += 1 # 需同时判断done和truncated,避免陷入死循环 if done or truncated: break print("Episode done in %d steps, total reward %.2f" % ( total_steps, total_reward)) env.close()
额外注意事项:
- 如果录制时提示找不到ffmpeg工具,需要先安装它:
- Ubuntu/Debian:
sudo apt-get install ffmpeg - macOS:
brew install ffmpeg - Windows:通过Chocolatey安装
choco install ffmpeg,或从官网下载后手动配置环境变量
- Ubuntu/Debian:
- 录制的视频会保存在
recording目录下,每个episode对应一个单独的视频文件。
场景2:想保留原书的Monitor用法(不推荐)
如果一定要沿用旧版Monitor,可以安装Gym的旧版本(比如v0.25.2),执行以下命令:
pip install gym==0.25.2
但这种方式不推荐,旧版本缺少大量新特性和bug修复,后续学习其他RL内容时可能会遇到更多兼容性问题。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

