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

PyInstaller打包moderngl应用报缺失glcontext模块问题

PyInstaller打包moderngl项目运行提示缺失glcontext模块

问题复现

最小复现代码如下:

import moderngl as mgl
import pygame as pg

pg.init()
screen = pg.display.set_mode((800, 600), pg.DOUBLEBUF | pg.OPENGL)
gl_ctx = mgl.create_context(require=330)

clock = pg.time.Clock()
while True:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            pg.quit()
            quit()
    clock.tick(30)

使用如下命令执行打包:

pyinstaller --onefile test_gl.py

打包完成后运行dist目录下生成的exe文件,未出现预期的空白窗口,反而抛出如下报错:

Traceback (most recent call last):
  File "test_gl.py", line 6, in <module>
  File "moderngl\context.py", line 1619, in create_context
ModuleNotFoundError: No module named 'glcontext'
[7428] Failed to execute script 'test_gl' due to unhandled exception!

复现所用环境版本:

  • Python 3.10.4
  • PyInstaller 4.10
  • PyGame 2.1.2(配套SDL 2.0.18,适配Python 3.10.4)
  • moderngl 5.6.4

故障原因

moderngl创建OpenGL上下文依赖的glcontext模块为运行时动态导入,PyInstaller默认的静态依赖扫描仅能识别代码中显式通过import/from ... import语法声明的模块,无法识别这类动态加载的隐式依赖,因此不会将glcontext打包进最终生成的可执行文件,触发模块找不到的报错。该场景完全支持正常打包,不存在版本兼容问题。

解决方法

  • 先确认本地Python环境已正确安装glcontext依赖,执行如下命令避免本地环境缺包:
    pip install glcontext
    
  • 打包时显式声明将glcontext作为隐藏依赖纳入打包范围,使用如下命令即可完成正常打包,生成的exe可直接运行弹出空白窗口:
    pyinstaller --onefile --hidden-import glcontext test_gl.py
    
  • 若执行上述命令打包后仍存在加载异常(极个别情况会出现glcontext携带的平台相关二进制文件未被收集),直接将glcontext包下的所有文件全量收集进打包结果即可:
    pyinstaller --onefile --collect-all glcontext test_gl.py
    

注:PyInstaller不会自动收集项目的所有依赖,所有动态导入、插件式加载的模块都需要手动通过--hidden-import、--collect-all这类参数指定打包范围,这类问题在带C扩展、实现了插件系统的第三方库中非常常见。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:48:39