You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决运行《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,或从官网下载后手动配置环境变量
  • 录制的视频会保存在recording目录下,每个episode对应一个单独的视频文件。

场景2:想保留原书的Monitor用法(不推荐)

如果一定要沿用旧版Monitor,可以安装Gym的旧版本(比如v0.25.2),执行以下命令:

pip install gym==0.25.2

但这种方式不推荐,旧版本缺少大量新特性和bug修复,后续学习其他RL内容时可能会遇到更多兼容性问题。

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 15:12:40