【问题标题】:Errors while running Kivy after PyInstaller: pyi_rth_pkgres, wordcount.kv, unable to get a window etcPyInstaller 后运行 Kivy 时出错:pyi_rth_pkgres、wordcount.kv、无法获取窗口等
【发布时间】:2020-02-12 10:11:39
【问题描述】:

我需要使用 PyInstaller 为我的 Windows Kivy 应用程序编译一个独立的执行程序或--onedir 版本。我一个接一个地遇到问题,这就是我在这里发布它的原因。我可以找到几乎所有问题的解决方案,但似乎从一开始就有问题。

程序由.py.kv文件组成,只需要(除了Kivy模块)Textract(导入as txt),如果我使用IDLE的shell,效果很好。

我使用最新版本的 KivyPyInstaller(如果 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


    【解决方案1】:

    好吧,我解决了这个问题,但解决方案不是很优雅:

    pyinstaller --add-data "./wordcount.kv;." --hiddenimport pkg_resources.py2_warn --hiddenimport win32timezone --hiddenimport textract.parsers.pptx_parser --hiddenimport textract.parsers.docx_parser wordcount.py
    

    然后我将 libpng16-16.dll 从 Python 文件夹之一复制到 /dist/ 文件夹。

    如果有人知道更好的方法,请分享...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2022-12-29
      • 2016-10-15
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      相关资源
      最近更新 更多