![](/img/trans.png)
[英]Error when trying to run Kivy app with Python27: raise Exception('SDL2: Unable to load image')
[英]SDL2 Error: "Unable to load image <default.png>" when freezing kivy application using pyinstaller
我無法使用 pyinstaller 生成工作 exe(應用程序的名稱是 settings_gui)。
運行時錯誤:(完整日志)
[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
,這正常嗎? 我已經看到這個線程建議通過_MEIPASS
重定向資源,但這沒有幫助 - 預期,因為我不是在單文件模式下構建我的應用程序。
任何有關如何解決此問題的提示都值得贊賞。
編輯:
更多信息:
我設法通過復制文件解決了這個問題
From: [Python]\share\sdl2\bin\libpng16-16.dll
To: [Dist]\<projectName>\libpng16-16.dll
該文件的一個實例已經存在,但我替換它的那個實例大約大 20kb(從 198kb 到 213kb)。
重要的部分是我的應用程序現在可以運行,並且我沒有更改任何其他內容。
我有同樣的問題。
來自 kivy 文檔
備用安裝
前面的示例使用了例如 *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins + gstreamer.dep_bins)],以使 PyInstaller 添加這些依賴項使用的所有 dll。 如果沒有使用wheels 方法安裝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 可以工作
將此代碼添加到項目目錄中的 xxx.spec 文件中以解決此問題:
# -*- mode: python ; coding: utf-8 -*-
from kivy_deps import sdl2, glew #at the beginning of xxx.spec
...
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
strip=False,
upx=True,
upx_exclude=[],
name='KivyApp')
然后,在您的項目目錄中運行此命令以打包您的 kivy 應用程序:
pyinstaller xxx.spec
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.