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

运行Stable Baselines Gym测试代码时遇NameError:glPushMatrix未定义

CartPole-v1渲染报错:NameError: name 'glPushMatrix' is not defined 解决办法

问题场景

运行基于Stable Baselines3的CartPole-v1测试代码时,调用env.render()触发NameError: name 'glPushMatrix' is not defined错误,已尝试安装PyOpenGL、PyOpenGL_accelerate及重装pyglet但未解决。

测试代码:

import gym
from stable_baselines3 import A2C

env = gym.make("CartPole-v1")

model = A2C("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=10_000)

obs = env.reset()
for i in range(100):
    action, _state = model.predict(obs, deterministic=True)
    obs, reward, done, info = env.step(action)
    env.render()
    if done:
      obs = env.reset()

错误栈信息:

Traceback (most recent call last):
  File "test_cart_pole.py", line 14, in <module>
    env.render()
  File "/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/gym/core.py", line 295, in render
    return self.env.render(mode, **kwargs)
  File "/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/gym/envs/classic_control/cartpole.py", line 229, in render
    return self.viewer.render(return_rgb_array=mode == "rgb_array")
  File "/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/gym/envs/classic_control/rendering.py", line 126, in render
    self.transform.enable()
  File "/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/gym/envs/classic_control/rendering.py", line 232, in enable
    glPushMatrix()
NameError: name 'glPushMatrix' is not defined

解决办法

  • 切换为无GUI的rgb_array渲染模式
    不需要依赖OpenGL GUI环境,直接修改渲染方式:

    # 方式1:创建环境时指定render_mode
    env = gym.make("CartPole-v1", render_mode="rgb_array")
    
    # 方式2:调用render时指定mode
    env.render(mode="rgb_array")
    
  • 安装兼容版本的PyOpenGL
    新版本PyOpenGL移除了glPushMatrix这类旧OpenGL函数,安装适配gym的旧版本:

    pip install PyOpenGL==3.1.5 PyOpenGL_accelerate==3.1.5
    
  • 改用pygame作为渲染后端(适配macOS)
    macOS原生OpenGL环境易出问题,替换为pygame渲染器:

    1. 先安装pygame:
    pip install pygame
    
    1. 在代码开头添加渲染器替换代码:
    import gym
    from gym.envs.classic_control import rendering
    rendering.Viewer = rendering.PygameViewer
    
  • 无头环境下使用虚拟显示
    服务器或无桌面环境中,用xvfb创建虚拟显示运行脚本:

    1. 安装xvfb:
    # macOS
    brew install xvfb
    # Ubuntu/Debian
    sudo apt install xvfb
    
    1. 运行脚本:
    xvfb-run -a python test_cart_pole.py
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:56:29