运行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渲染器:- 先安装pygame:
pip install pygame- 在代码开头添加渲染器替换代码:
import gym from gym.envs.classic_control import rendering rendering.Viewer = rendering.PygameViewer无头环境下使用虚拟显示
服务器或无桌面环境中,用xvfb创建虚拟显示运行脚本:- 安装xvfb:
# macOS brew install xvfb # Ubuntu/Debian sudo apt install xvfb- 运行脚本:
xvfb-run -a python test_cart_pole.py
内容的提问来源于stack exchange,提问作者Jack Su
相关产品推荐
相关产品推荐

