pyglet分段错误和其他错误

时间:2015-02-20 21:33:41

标签: python linux opengl archlinux pyglet

我尝试使用Python库pyglet为sprite加载图像。最初的目的是与游戏相关,但我相信我已将问题简化为一行代码。在Python shell中,我导入pyglet,然后运行这行代码(或等效的代码):

pyglet.image.load("image.png")

Python退出,终端输出:

Segmentation fault (core dumped)

但有时它并没有这样做,而是抛出

Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/pyglet/__init__.py", line 351, in __getattr__
    return getattr(self._module, name)
AttributeError: 'NoneType' object has no attribute 'load'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/site-packages/pyglet/__init__.py", line 357, in __getattr__
    __import__(import_name)
  File "/usr/lib/python3.4/site-packages/pyglet/image/__init__.py", line 145, in <module>
    from pyglet.gl import *
  File "/usr/lib/python3.4/site-packages/pyglet/gl/__init__.py", line 236, in <module>
    import pyglet.window
  File "/usr/lib/python3.4/site-packages/pyglet/window/__init__.py", line 1816, in <module>
    gl._create_shadow_window()
  File "/usr/lib/python3.4/site-packages/pyglet/gl/__init__.py", line 205, in _create_shadow_window
    _shadow_window = Window(width=1, height=1, visible=False)
  File "/usr/lib/python3.4/site-packages/pyglet/window/xlib/__init__.py", line 166, in __init__
    super(XlibWindow, self).__init__(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/pyglet/window/__init__.py", line 515, in __init__
    context = config.create_context(gl.current_context)
  File "/usr/lib/python3.4/site-packages/pyglet/gl/xlib.py", line 186, in create_context
    return XlibContextARB(self, share)
  File "/usr/lib/python3.4/site-packages/pyglet/gl/xlib.py", line 300, in __init__
    super(XlibContext13, self).__init__(config, share)
  File "/usr/lib/python3.4/site-packages/pyglet/gl/xlib.py", line 203, in __init__
    raise gl.ContextException('Could not create GL context') 
pyglet.gl.ContextException: Could not create GL context

Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/pyglet/__init__.py", line 351, in __getattr__
    return getattr(self._module, name)
AttributeError: 'NoneType' object has no attribute 'load'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/site-packages/pyglet/__init__.py", line 357, in __getattr__
    __import__(import_name)
  File "/usr/lib/python3.4/site-packages/pyglet/image/__init__.py", line 145, in <module>
    from pyglet.gl import *
  File "/usr/lib/python3.4/site-packages/pyglet/gl/__init__.py", line 101, in <module>
    from pyglet.gl import gl_info
ImportError: cannot import name 'gl_info'

(我不确定为什么它会在这两者之间交替出现。)

此外,

pyglet.window.Window()

也会抛出异常

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/site-packages/pyglet/window/xlib/__init__.py", line 166, in __init__
    super(XlibWindow, self).__init__(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/pyglet/window/__init__.py", line 515, in __init__
    context = config.create_context(gl.current_context)
  File "/usr/lib/python3.4/site-packages/pyglet/gl/xlib.py", line 186, in create_context
    return XlibContextARB(self, share)
  File "/usr/lib/python3.4/site-packages/pyglet/gl/xlib.py", line 300, in __init__
    super(XlibContext13, self).__init__(config, share)
  File "/usr/lib/python3.4/site-packages/pyglet/gl/xlib.py", line 203, in __init__
    raise gl.ContextException('Could not create GL context') 
pyglet.gl.ContextException: Could not create GL context

从shell运行时。有时它在从文件运行时运行(它将运行,在后续运行时失败,然后最终用于另一次运行),如果我没记错的话,它运行时没有问题来自用cx_Freeze冻结的Python程序。

我还没有在Google上找到比几年更新的东西。我不太了解OpenGL;目前我使用pyglet是因为它简化了构建应用程序的方式。

我正在使用XFCE,AMD CPU和AMD集成显卡(带有关闭的Catalyst驱动程序)运行64位Manjaro Linux。我有Python 3.4.2和pyglet 1.2.0。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

现在(2016.10.30)这个问题是fixet。关于它的网站开发现状报告。

Pyglet网站开发人员是图像加载器的一个例子:http://www.pyglet.org/doc/programming_guide/image_viewer.html

在我的Archlinux系统(Linux alw 3.19.1-1-ARCH#1 SMP PREEMPT Sat Mar 7 20:59:30 CET 2015 x86_64 GNU / Linux)此错误仍然存​​在 - 核心转储使用python-3,蝙蝠与python-2一起工作正常。我使用了最新版本的pyglet - 1.2.2。

在MS-Win 8.1上,此示例可以正常运行。我认为问题在于这个模块的错误工作。

我在开发网站https://bitbucket.org/pyglet/pyglet/issue/25/core-dumped-on-linux-64

上报告了此错误

现在您只能使用PNG格式:

...
from pyglet.image.codecs.png import PNGImageDecoder

fname = 'pennant.png'
img_pennant = pyglet.image.load(fname, decoder=PNGImageDecoder())
...

此代码不是核心转储。