如何避免调用env.render(mode='rgb_array')时弹出可视化窗口?
解决方案
适配环境:macOS Big Sur 11.4、Python 3.9.5、gym 0.18.3
方案1:配置环境变量实现无头渲染(无额外依赖)
这是最适合pytest调用的方案,不需要安装虚拟显示器等额外组件,仅需在导入gym前配置两个环境变量即可完全禁用窗口弹出,代码示例如下:
import os # 配置pyglet使用无头渲染后端,不创建可视化窗口 os.environ['PYGLET_HEADLESS'] = '1' # 配置SDL使用dummy视频驱动,避免macOS环境下强制唤起图形窗口 os.environ['SDL_VIDEODRIVER'] = 'dummy' import gym env = gym.make('BipedalWalker-v3') state = env.render(mode='rgb_array')
方案2:兼容处理(方案1无效时使用)
部分macOS环境下如果仍然弹出窗口,可以在首次调用render获取帧数组后,手动关闭隐式创建的viewer对象:
import os os.environ['PYGLET_HEADLESS'] = '1' os.environ['SDL_VIDEODRIVER'] = 'dummy' import gym env = gym.make('BipedalWalker-v3') state = env.render(mode='rgb_array') # 手动销毁隐式创建的窗口实例 if hasattr(env, 'viewer') and env.viewer is not None: env.viewer.close() env.viewer = None
注意事项
- 所有环境变量的配置必须放在
import gym语句之前,否则渲染库加载完成后环境变量不会生效 - 上述方案完全不需要安装xvfb等虚拟显示器组件,可直接在远程服务器、pytest自动化测试场景下正常运行
内容的提问来源于stack exchange,提问作者watch-this
相关产品推荐
相关产品推荐

