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
相关产品推荐
相关产品推荐

