切换驱动程序后 Kivy 找不到 Window 提供程序

Posted

技术标签:

【中文标题】切换驱动程序后 Kivy 找不到 Window 提供程序【英文标题】:Kivy fails to find a Window provider after switching drivers 【发布时间】:2017-05-10 07:02:18 【问题描述】:

我正在运行 Ubuntu 16.04、Python 3.5 和 Kivy v1.9.2-dev0 浏览设置时,我注意到我没有使用 NVIDIA 推荐的专有驱动程序,而是使用开源的 nouveau。所以我觉得最好换个方式。但是当我这样做时,突然我的 Kivy 应用程序开始失败。这是日志:

[INFO   ] [Kivy        ] v1.9.2-dev0
[INFO   ] [Python      ] v3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609]
[INFO   ] [Factory     ] 193 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_gif, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO   ] [Text        ] Provider: sdl2
[INFO   ] [OSC         ] using <multiprocessing> for socket
[INFO   ] [Window      ] Provider: sdl2(['window_egl_rpi'] ignored)
[CRITICAL] [Window      ] Unable to find any valuable Window provider.
egl_rpi - ImportError: cannot import name 'bcm'
  File "/usr/lib/python3/dist-packages/kivy/core/__init__.py", line 59, in core_select_lib
    fromlist=[modulename], level=0)
  File "/usr/lib/python3/dist-packages/kivy/core/window/window_egl_rpi.py", line 12, in <module>
    from kivy.lib.vidcore_lite import bcm, egl

sdl2 - RuntimeError: b'Could not create GL context: BadValue (integer parameter out of range for operation)'
  File "/usr/lib/python3/dist-packages/kivy/core/__init__.py", line 67, in core_select_lib
    cls = cls()
  File "/usr/lib/python3/dist-packages/kivy/core/window/window_sdl2.py", line 139, in __init__
    super(WindowSDL, self).__init__()
  File "/usr/lib/python3/dist-packages/kivy/core/window/__init__.py", line 794, in __init__
    self.create_window()
  File "/usr/lib/python3/dist-packages/kivy/core/window/window_sdl2.py", line 262, in create_window
    self.fullscreen, resizable, state)
  File "kivy/core/window/_window_sdl2.pyx", line 142, in kivy.core.window._window_sdl2._WindowSDL2Storage.setup_window (kivy/core/window/_window_sdl2.c:2462)
  File "kivy/core/window/_window_sdl2.pyx", line 56, in kivy.core.window._window_sdl2._WindowSDL2Storage.die (kivy/core/window/_window_sdl2.c:1556)

x11 - ImportError: No module named 'kivy.core.window.window_x11'
  File "/usr/lib/python3/dist-packages/kivy/core/__init__.py", line 59, in core_select_lib
    fromlist=[modulename], level=0)

[CRITICAL] [App         ] Unable to get a Window, abort.

该应用程序与 nouveau 完美配合,那么这次崩溃的原因是什么?我应该切换回nouveau吗?有没有办法让它与 NVIDIA 驱动程序一起工作?

【问题讨论】:

抱歉评论晚了,这个错误修复了吗? @Eddie 不幸的是,我的电脑与官方的 NVIDIA 驱动程序不兼容,我又回到了 nouveau,所以我不知道你的答案是否正确。当未来的读者对您的答案进行评分时,我会根据他们的经验接受它 【参考方案1】:

我也在使用官方的 NVIDIA 驱动程序,它在我的机器上运行良好。我想您缺少一些库文件。您在安装 Kivy 的先决条件(如 Cython、PyGame、SDL2 等)时是否遇到任何错误?

答案已更新

如果我没记错的话,您之前安装的依赖项与您的新显卡驱动程序不兼容。您将不得不再次安装依赖项,因为有时依赖项的安装和编译会略有不同,具体取决于您当前的硬件、驱动程序、操作系统配置等。

有时重新启动计算机也有帮助,尤其是当(无论出于何种原因)即使更新成功,旧的恶魔仍在后台运行。

根据您的回溯错误,某些东西(我不知道 SDL2、PyGame 或其他东西)无法创建 Window 并且 Kivy 没有任何东西可以渲染它的图形。

如果我是你,我会完全卸载 Kivy 的所有全局依赖项,我也会卸载 Kivy 并使用 PyEnv (https://github.com/yyuu/pyenv) 来管理依赖项的本地安装。请记住 PyEnv 有它自己的依赖项 (https://github.com/yyuu/pyenv/wiki/Common-build-problems)。

【讨论】:

不,一切都应该没问题。正如我所提到的,Kivy 使用 nouveau 驱动程序可以完美运行,因此所有依赖项都应该到位 重启电脑有帮助。

以上是关于切换驱动程序后 Kivy 找不到 Window 提供程序的主要内容,如果未能解决你的问题,请参考以下文章

Kivy - windows - 根本找不到任何有价值的窗口提供程序

Kivy 错误 - 找不到任何有价值的窗口提供程序

Kivy/ Kivymd 地图切换屏幕

在 Kivy 中使用切换按钮绑定函数

Kivy安装找不到GL/gl.h?

使用 buildozer 打包我的 kivy 应用程序时如何修复“java.lang.module.FindException:找不到模块 java.se.ee”错误