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

GitLab CI/CD中运行Pyglet渲染pytest测试报错如何解决?

解决GitLab CI/CD中Pyglet测试的NoSuchConfigException错误

问题

在GitLab CI/CD环境中使用pytest运行包含Pyglet渲染逻辑的测试时,触发错误:pyglet.window.NoSuchConfigException: No standard config is available。已尝试设置headless=True/False、安装xvfb并配置虚拟屏幕,问题仍存在,但本地笔记本测试正常。

错误回溯

from pyglet.window import key
/root/miniconda3/envs/myenv-3.10-cpu/lib/python3.10/site-packages/pyglet/window/__init__.py:1929: in <module>
    gl._create_shadow_window()
/root/miniconda3/envs/myenv-3.10-cpu/lib/python3.10/site-packages/pyglet/gl/__init__.py:165: in _create_shadow_window
    _shadow_window = ShadowWindow()
/root/miniconda3/envs/myenv-3.10-cpu/lib/python3.10/site-packages/pyglet/gl/__init__.py:159: in __init__
    super().__init__(width=1, height=1, visible=False)

示例测试代码

def test_pyglet():
 import pyglet

 window = pyglet.window.Window()

 label = pyglet.text.Label('Hello, world',
                          font_name='Times New Roman',
                          font_size=36,
                          x=window.width // 2, y=window.height // 2,
                          anchor_x='center', anchor_y='center')

 @window.event
 def on_draw():
    window.clear()
    label.draw()

 pyglet.app.run()

解决方案

1. 强制Pyglet使用兼容的无头模式配置

在导入Pyglet前设置环境变量,指定无头模式和兼容的GL版本:

import os
os.environ['PYGLET_HEADLESS'] = '1'
os.environ['PYGLET_GL'] = 'es2'  # 适配CI环境的轻量GL配置
import pyglet

也可以在GitLab CI的job脚本中预先设置:

export PYGLET_HEADLESS=1 PYGLET_GL=es2

2. 优化XVFB启动参数

确保启动XVFB时指定足够的显示参数,避免配置不兼容:

xvfb-run -a -s "-screen 0 1024x768x24" pytest tests/

-a自动分配可用的显示编号,x24指定24位色深,满足Pyglet的渲染要求。

3. 调整测试逻辑,避免完整窗口循环

测试场景不需要持续运行app循环,改用HeadlessWindow并手动触发绘制:

def test_pyglet():
    import os
    os.environ['PYGLET_HEADLESS'] = '1'
    import pyglet

    # 使用无头窗口替代普通窗口
    window = pyglet.window.HeadlessWindow(width=800, height=600)
    
    label = pyglet.text.Label('Hello, world',
                              font_name='Times New Roman',
                              font_size=36,
                              x=window.width // 2, y=window.height // 2,
                              anchor_x='center', anchor_y='center')

    def on_draw():
        window.clear()
        label.draw()

    # 手动执行绘制流程
    window.switch_to()
    on_draw()
    window.flip()

4. 补充CI环境的依赖库

确保CI容器安装了必要的OpenGL库(以Debian/Ubuntu为例):

apt-get update && apt-get install -y libgl1-mesa-glx libgl1-mesa-dri xvfb

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:30:08