【发布时间】:2020-02-12 10:11:39
【问题描述】:
我需要使用 PyInstaller 为我的 Windows Kivy 应用程序编译一个独立的执行程序或--onedir 版本。我一个接一个地遇到问题,这就是我在这里发布它的原因。我可以找到几乎所有问题的解决方案,但似乎从一开始就有问题。
程序由.py和.kv文件组成,只需要(除了Kivy模块)Textract(导入as txt),如果我使用IDLE的shell,效果很好。
我使用最新版本的 Kivy 和 PyInstaller(如果 PyInstaller 我也尝试过开发版,如some people suggested)。
我遇到的第一个问题是
ModuleNotFoundError: No module named 'pkg_resources.py2_warn'
[4808] Failed to execute script pyi_rth_pkgres
我用
解决了pyinstaller wordcount.py --hiddenimport pkg_resources.py2_warn
作为some people suggested 之前处理过这个问题。然后,满怀期待,我再次运行 .exe 并得到了这个:
FileNotFoundError: [Errno 2] No such file or directory: 'wordcount.kv'
[3356] Failed to execute script wordcount
显然,.kv 不知何故未包含在包中,好吧,我再次更改命令:
pyinstaller wordcount.py --add-data "./wordcount.kv;." --hiddenimport pkg_resources.py2_warn
手动强制将 .kv 放入包中。或者我可以把它复制到那里——结果相同:
[WARNING] [Image ] Unable to load image <C:\GUI Projects\wordcount\dist\wordcount\kivy_install\data\glsl\default.png>
[CRITICAL] [Window ] Unable to find any valuable Window provider. Please enable debug logging (e.g. add -d if running from the command line, or change the log level in the config) and re-run your app to identify potential causes
sdl2 - Exception: SDL2: Unable to load image
File "site-packages\kivy\core\__init__.py", line 71, in core_select_lib
File "site-packages\kivy\core\window\window_sdl2.py", line 152, in __init__
File "site-packages\kivy\core\window\__init__.py", line 981, in __init__
File "site-packages\kivy\core\window\window_sdl2.py", line 312, in create_window
File "site-packages\kivy\core\window\__init__.py", line 1258, in create_window
File "kivy\graphics\instructions.pyx", line 783, in kivy.graphics.instructions.RenderContext.__init__
File "site-packages\kivy\core\image\__init__.py", line 561, in __init__
File "site-packages\kivy\core\image\__init__.py", line 756, in _set_filename
File "site-packages\kivy\core\image\__init__.py", line 460, in load
File "site-packages\kivy\core\image\__init__.py", line 223, in __init__
File "site-packages\kivy\core\image\img_sdl2.py", line 47, in load
[CRITICAL] [App ] Unable to get a Window, abort.
as people suggest, onw 可能只是将 .dlls 复制到目录 ([Dist]\\libpng16-16.dll)。或者像这样重写 spec. :
...遗憾的是,没有任何积极的结果。
Traceback (most recent call last):
File "wordcount.py", line 47, in <module>
WordCount().run()
File "site-packages\kivy\app.py", line 855, in run
File "site-packages\kivy\base.py", line 504, in runTouchApp
File "site-packages\kivy\core\window\window_sdl2.py", line 747, in mainloop
File "site-packages\kivy\core\window\window_sdl2.py", line 479, in _mainloop
File "site-packages\kivy\base.py", line 339, in idle
File "site-packages\kivy\clock.py", line 591, in tick
File "kivy\_clock.pyx", line 384, in kivy._clock.CyClockBase._process_events
File "kivy\_clock.pyx", line 414, in kivy._clock.CyClockBase._process_events
File "kivy\_clock.pyx", line 412, in kivy._clock.CyClockBase._process_events
File "kivy\_clock.pyx", line 167, in kivy._clock.ClockEvent.tick
File "site-packages\kivy\uix\filechooser.py", line 698, in _update_files
File "site-packages\kivy\uix\filechooser.py", line 718, in _create_files_entries
File "site-packages\kivy\uix\filechooser.py", line 839, in _generate_file_entries
File "site-packages\kivy\uix\filechooser.py", line 871, in _add_files
File "site-packages\kivy\uix\filechooser.py", line 871, in <listcomp>
File "site-packages\kivy\uix\filechooser.py", line 178, in is_hidden
ModuleNotFoundError: No module named 'win32timezone'
[10576] Failed to execute script wordcount
此外,我很确定这只是开始。还有其他解决方案吗?
任何帮助将不胜感激。我知道这些问题之前已经讨论过,我提前道歉,但我找到的解决方案都不适合我。
PS:warn.txt中的“缺失模块”列表和万里长城一样长,正常吗?特别是考虑到只使用了两个模块。
【问题讨论】:
标签: python python-3.x dependencies kivy pyinstaller