SDL2 Error: “Unable to load image <default.png>” when freezing kivy application using pyinstaller

我的梦境 提交于 2020-06-25 05:40:27

问题


I'm unable to produce a working exe with pyinstaller (the name of the app is settings_gui).

Runtime error: (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

What is going wrong? I checked <project_path>/dist/settings_gui/kivy_install/data/glsl/default.png, it's there. I find it weird however that the path is SETTING~1, is that normal? I've seen this thread which recommends to redirect the resources through _MEIPASS, but this doesn't help - expectedly, since I'm not building my app in one-file-mode.

Any tip on how to troubleshoot this is appreciated.

Edit:

More info:

  • Without pyinstaller, the app runs perfectly fine - except for when I close it or stop it otherwise; when I do that, python crashes.
  • When I build my app, a kivy window opens and crashes immediately. I always close it and the build process continues.
  • My .spec file
  • Logs of the build

回答1:


I'm having the same issue.

From kivy docs

Alternate installations

The previous examples used e.g. *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins + gstreamer.dep_bins)], to make PyInstaller add all the dlls used by these dependencies. If kivy was not installed using the wheels method these commands will not work and e.g. kivy.deps.sdl2 will fail to import. Instead, one must find the location of these dlls and manually pass them to the Tree class in a similar fashion as the example.

Changed

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

to something like

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

It still have to close a window building in pyinstaller, but now the application .exe works




回答2:


I managed to fix the issue by copying file

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

There was an instance of the file already there but the one I replaced it with was about 20kb larger (from 198kb to 213kb).

The important part is that my app works now and I didn't change anything else.



来源:https://stackoverflow.com/questions/42671456/sdl2-error-unable-to-load-image-default-png-when-freezing-kivy-application

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!