我尝试使用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。
有什么想法吗?
答案 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())
...
此代码不是核心转储。