SDL2错误:&#34;无法加载图像<default.png>&#34;使用pyinstaller

时间:2017-03-08 12:30:34

标签: python kivy pyinstaller sdl-2

我无法使用pyinstaller生成一个工作的exe(应用程序的名称是settings_gui)。

运行时错误:(Full log

[WARNING           ] [Image       ] Unable to load image <<project_path>\dist\SETTIN~1\kivy_install\data\glsl\default.png>
[CRITICAL          ] [Window      ] Unable to find any valuable Window provider
at all!
sdl2 - Exception: SDL2: Unable to load image
  File "site-packages\kivy\core\__init__.py", line 67, in core_select_lib
  File "site-packages\kivy\core\window\window_sdl2.py", line 138, in __init__
  File "site-packages\kivy\core\window\__init__.py", line 722, in __init__
  File "site-packages\kivy\core\window\window_sdl2.py", line 255, in create_wind
ow
  File "site-packages\kivy\core\window\__init__.py", line 897, in create_window
  File "kivy\graphics\instructions.pyx", line 756, in kivy.graphics.instructions
.RenderContext.__init__ (kivy\graphics\instructions.c:10729)
  File "site-packages\kivy\core\image\__init__.py", line 512, in __init__
  File "site-packages\kivy\core\image\__init__.py", line 700, in _set_filename
  File "site-packages\kivy\core\image\__init__.py", line 430, in load
  File "site-packages\kivy\core\image\__init__.py", line 198, in __init__
  File "site-packages\kivy\core\image\img_sdl2.py", line 42, in load

[CRITICAL          ] [App         ] Unable to get a Window, abort.
 Exception SystemExit: 1 in 'kivy.properties.dpi2px' ignored
[INFO              ] [Text        ] Provider: sdl2
 Traceback (most recent call last):
   File "settings_gui.py", line 26, in <module>
 AttributeError: 'NoneType' object has no attribute 'clearcolor'
Failed to execute script settings_gui

出了什么问题?我检查了<project_path>/dist/settings_gui/kivy_install/data/glsl/default.png,它在那里。我觉得奇怪的是,路径是SETTING~1,这是正常的吗?我已经看到this thread建议通过_MEIPASS重定向资源,但这没有任何帮助 - 预计,因为我没有在单文件中构建我的应用程序 - 模式。

有关如何解决此问题的任何提示都表示赞赏。

修改

更多信息:

  • 没有pyinstaller,应用程序运行完全正常 - 除非我关闭它或否则停止它;当我这样做时,python崩溃了。
  • 当我构建我的应用程序时,会打开一个kivy窗口并立即崩溃。我总是关闭它,并继续构建过程。
  • My .spec file
  • Logs of the build

2 个答案:

答案 0 :(得分:3)

我有同样的问题。

来自kivy docs

  

替代安装

     

前面的例子使用了例如* [Tree(p)for p in(sdl2.dep_bins + glew.dep_bins + gstreamer.dep_bins)],使PyInstaller添加这些依赖项使用的所有dll。如果未使用wheel方法安装kivy,则这些命令将不起作用,例如kivy.deps.sdl2将无法导入。相反,必须找到这些dll的位置,并以与示例类似的方式手动将它们传递给Tree类。

更改

*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],

类似

Tree('C:\\Python27\\share\\sdl2\\bin\\'),
Tree('C:\\Python27\\share\\glew\\bin\\'),

它仍然必须关闭pyinstaller中的窗口构建,但现在应用程序.exe工作

答案 1 :(得分:2)

我设法通过复制文件来解决此问题

From: [Python]\share\sdl2\bin\libpng16-16.dll
To:   [Dist]\<projectName>\libpng16-16.dll

已经有一个文件实例,但是我替换为该文件的实例大约大了20kb(从198kb到213kb)。

重要的是我的应用现在可以正常工作了,而我没有做任何其他更改。