sdl2 - 导入错误:找不到指定的模块和[CRITICAL] [App] 无法获取窗口,中止

21
  • Python:3.6.4
  • 操作系统:Windows 10
  • Kivy:1.10.0

Kivy安装方法

python -m pip install --upgrade pip wheel setuptools
python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
python -m pip install kivy.deps.gstreamer
python -m pip install kivy.deps.angle
python -m pip install kivy
python -m pip install kivy_examples
python -m pip install Pillow
python -m pip install cython
python -m pip install PyEnchant

描述

你好,我正在尝试运行安装Kivy的示例代码。以下是我收到的错误信息,请帮忙解决。我已经尝试查看之前关于类似问题的咨询,但是到目前为止没有任何建议起到作用。

[INFO   ] [Logger      ] Record log in C:\Users\DoddJ\.kivy\logs\kivy_18-03-26_52.txt
[INFO   ] [Kivy        ] v1.10.0
[INFO   ] [Python      ] v3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
[INFO   ] [Factory     ] 194 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_pil, img_gif (img_sdl2, img_ffpyplayer ignored)
[INFO   ] [Text        ] Provider: pil(['text_sdl2'] ignored)
[CRITICAL] [Window      ] Unable to find any valuable Window provider.
sdl2 - ImportError: DLL load failed: The specified module could not be found.
    File "C:\Users\dev.DoddJ\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\core\__init__.py", line 59, in core_select_lib
fromlist=[modulename], level=0)
    File "C:\Users\dev.DoddJ\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\core\window\window_sdl2.py", line 26, in <module>
from kivy.core.window._window_sdl2 import _WindowSDL2Storage

[CRITICAL] [App         ] Unable to get a Window, abort.
  Exception ignored in: 'kivy.properties.dpi2px'
  Traceback (most recent call last):
    File "C:\Users\dev.DoddJ\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\utils.py", line 496, in __get__
      retval = self.func(inst)
    File "C:\Users\dev.DoddJ\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\metrics.py", line 174, in dpi
      EventLoop.ensure_window()
    File "C:\Users\dev.DoddJ\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\base.py", line 127, in ensure_window
      sys.exit(1)
SystemExit: 1
[CRITICAL] [App         ] Unable to get a Window, abort.

代码和日志

我正在尝试运行的代码:

import kivy
kivy.require('1.10.0') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.label import Label


class MyApp(App):

    def build(self):
        return Label(text='Hello world')


if __name__ == '__main__':
    MyApp().run()

看起来您的sdl安装存在问题,您可以尝试不使用kivy.deps.sdl2吗? - import random
当您通过PyCharm IDE运行Kivy应用程序时,是否遇到了此错误? - ikolim
要想在没有'kivy.deps.sdl2'的情况下运行它,导入错误就会消失,但我仍然会收到关于无法找到窗口的错误,程序中止。是的,这是在PyCharm中尝试运行它。 - Jaimie Dodd
请参考kivy-error-python-2-7-sdl2-import-error的解决方案。 - ikolim
7个回答

43

我也遇到了同样的问题。我解决它是先删除Kivy及其相关依赖。

python -m pip uninstall kivy

python -m pip uninstall kivy.deps.sdl2

python -m pip uninstall kivy.deps.glew

python -m pip uninstall kivy.deps.gstreamer

python -m pip uninstall image

现在重新安装除了gstreamer以外的所有内容。

python -m pip install --upgrade pip wheel setuptools

python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew --extra-index-url https://kivy.org/downloads/packages/simple/

python -m pip install kivy

它解决了错误。 感谢Ben R的答案。


1
只需添加第二行(安装docutils、pygments等),而无需卸载kivy,它仍然可以正常工作。 - Willy satrio nugroho
谢谢,问题已解决!我在Python控制台中运行了*.py文件而不是在PyCharm中运行,问题得到了解决...也许是PyCharm的错误(或环境设置错误)? - INNO TECH
1
非常感谢,现在我终于可以运行我的应用程序了。 - Rahul Patel

5

07-2021,Python 3.9

问题在于PATH变量未设置(从Windows商店安装的Python)。

**从Windows菜单/浏览器:

卸载程序

一开始先移除任何Python安装,这会让生活更轻松**

最好从python.org下载Python,并作为管理员以“定制”方式安装到已知路径(对于所有用户而言即c:/programs/python39)。

请确保勾选:

将其添加到系统的PATH变量中

现在,在安装Python之后,我们注销并重新登录。然后在开始菜单中寻找CMD并运行!作为管理员

管理员位置,按照网站上所述进行安装:https://kivy.org/doc/stable-1.10.1/installation/installation-windows.html

即:

python -m pip install --upgrade pip wheel setuptools
python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
python -m pip install kivy.deps.gstreamer

python -m pip install kivy.deps.angle

最后

python -m pip install kivy

这解决了整个问题。

附:如果您写入angin命令,即:

    python -m pip install kivy.deps.angle

文件的位置应该显示为IE:

c:/programs/python39....

不应该显示为您的主目录

(但是如果您以普通用户身份运行cmd,它将变成主目录,然后IT无法工作。但如果您所有文件都在主目录中,则必须在开始之前删除所有文件:

python -m pip uninstall docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew

然后(作为管理员): python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew


我认为从Windows商店安装的Python是我遇到的主要问题,谢谢你的提醒!我觉得我也糟糕地损坏了我的系统,因为我试图从多个地方多次安装Python来使其正常工作。最后,我只好清空我的电脑重新开始,然后使用pyenv下载我需要的特定版本的Python。然后按照常规的Kivy安装说明进行操作成功了。 - Erik

1

1
我曾经遇到过同样的问题,我的解决方法是使用virtualenv而不是venv。这会强制Kivy使用特定的Python安装。
  1. Download and install Python 3.7, since 3.8 doesn't seem to be supported yet (https://www.python.org/downloads/release/python-376/)

  2. Install virtualenv if not already installed

    pip install virtualenv

  3. Create a virtual environment, specifying the path to the newly installed Python version

    virtualenv --python=C:\path\to\Python37\python.exe my_venv

  4. Activate the new virtual environment

    my_venv/Scripts/activate.bat

  5. Install kivy according to Javapocalypse's answer

    python -m pip install --upgrade pip wheel setuptools
    
    python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew extra-index-url https://kivy.org/downloads/packages/simple/
    
    python -m pip install kivy
    

不要从Windows Store安装Python;删除所有内容,然后从python.org安装,在注销并重新登录后进行以下操作:CMD: python -m venv venv @和@ venv/Scripts/activate @and@ python -m pip install kivy ... TADA :) - blackmoon

0
先生,请使用 venv。我遇到了同样的错误,但是我使用 venv 解决了它。请创建一个虚拟环境并按照您的安装过程进行安装。这样可以解决问题。

0

保持你的主文件名为main.py,否则会引发错误。(在进行任何操作之前,请检查这一点)。


我认为.py文件的名称与此无关。将其更改为main.py并没有改变任何内容,而且该消息是关于查找窗口提供程序,而不是无法找到.py文件本身。 - dirtbirb

0

如果您启用调试日志 (-d),您将获得更多详细信息:

尝试从 "PROJECT\venv\lib\site-packages\kivy\core\window\_window_sdl2.cp37-win_amd64.pyd" 导入 "sdl2" 提供程序失败。当缺少依赖项或Windows PATH上存在多个相同依赖项dll且它们不兼容时,经常会遇到此错误。这可能发生在混合安装 (例如不同的python安装,如anaconda python和系统python) 或者如果另一个无关的程序将其目录添加到PATH中。请检查您的PATH和python安装是否存在潜在问题。要进一步排除“DLL加载失败”错误,请从dependencywalker.com下载“Dependency Walker”(与您的python位数匹配的64位或32位版本)并设置环境变量KIVY_SDL2_DEPENDENCY_WALKER为下载的depends.exe文件的完整路径,然后重新运行应用程序以生成错误报告。

使用Dependency Walker显示PYTHON37.DLL是缺失的。

我怀疑必须使用传统的系统安装Python,而不是来自Microsoft Store的安装。商店版本似乎没有任何地方存放DLL。虽然直到现在我还没有遇到过本机依赖性的问题。

我也尝试过从源代码构建,而不是使用预编译二进制包,但是--no-binary=kivy.deps.sdl2会导致以下错误:

ERROR: 找不到满足 kivy-deps.sdl2~=0.3.1; sys_platform == "win32" (from kivy) (from versions: none)
ERROR: 没有可匹配的版本: kivy-deps.sdl2~=0.3.1; sys_platform == "win32"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接