Python中PyOpenGL导入报错:'NoneType'无eglGetCurrentContext属性
PyOpenGL导入即报错:AttributeError: 'NoneType' object has no attribute 'eglGetCurrentContext'
已通过pip正确安装OpenGL相关组件,但仅执行模块导入就触发报错,代码及错误信息如下:
代码片段
# ulWindow import ulMath as ulm import OpenGL.GL as gl import OpenGL.GlE as gle import glfw def init() -> int|str: if (not glfw.init()): return "GLFW Failed to initialize" return 0
错误信息
Traceback (most recent call last): File "src/ulWindow.py", line 3, in <module> import OpenGL.GL as gl File "/home/jack3/.local/lib/python3.8/site-packages/OpenGL/GL/__init__.py", line 4, in <module> from OpenGL.GL.VERSION.GL_1_1 import * File "/home/jack3/.local/lib/python3.8/site-packages/OpenGL/GL/VERSION/GL_1_1.py", line 14, in <module> from OpenGL.raw.GL.VERSION.GL_1_1 import * File "/home/jack3/.local/lib/python3.8/site-packages/OpenGL/raw/GL/VERSION/GL_1_1.py", line 7, in <module> from OpenGL.raw.GL import _errors File "/home/jack3/.local/lib/python3.8/site-packages/OpenGL/raw/GL/_errors.py", line 4, in <module> _error_checker = _ErrorChecker( _p, _p.GL.glGetError ) File "/home/jack3/.local/lib/python3.8/site-packages/OpenGL/error.py", line 183, in __init__ self._isValid = platform.CurrentContextIsValid File "/home/jack3/.local/lib/python3.8/site-packages/OpenGL/platform/baseplatform.py", line 15, in __get__ value = self.fget( obj ) File "/home/jack3/.local/lib/python3.8/site-packages/OpenGL/platform/baseplatform.py", line 356, in CurrentContextIsValid return self.GetCurrentContext File "/home/jack3/.local/lib/python3.8/site-packages/OpenGL/platform/baseplatform.py", line 15, in __get__ value = self.fget( obj ) File "/home/jack3/.local/lib/python3.8/site-packages/OpenGL/platform/egl.py", line 106, in GetCurrentContext return self.EGL.eglGetCurrentContext AttributeError: 'NoneType' object has no attribute 'eglGetCurrentContext'
解决方法
- 调整导入顺序:PyOpenGL在导入时会尝试检测当前OpenGL上下文,此时GLFW尚未初始化会导致EGL上下文获取失败。先初始化GLFW再导入PyOpenGL模块:
# ulWindow import ulMath as ulm import glfw # 先初始化GLFW if not glfw.init(): raise RuntimeError("GLFW Failed to initialize") # 再导入PyOpenGL组件 import OpenGL.GL as gl import OpenGL.GlE as gle def init() -> int|str: return 0
- 强制指定OpenGL平台:如果调整顺序无效,在导入PyOpenGL前设置环境变量指定使用GLFW平台:
import os os.environ['PYOPENGL_PLATFORM'] = 'glfw' import ulMath as ulm import OpenGL.GL as gl import OpenGL.GlE as gle import glfw def init() -> int|str: if (not glfw.init()): return "GLFW Failed to initialize" return 0
- 检查系统依赖库:确保系统已安装OpenGL相关系统库,比如在Debian/Ubuntu系统执行:
sudo apt-get install libgl1-mesa-glx libegl1-mesa
内容的提问来源于stack exchange,提问作者Jack4j2
相关产品推荐
相关产品推荐

