Pythonでkivyバージョンv2.1.0.dev0を使用しアプリを実行できないエラーが発生することについて解説します。
■PC環境
■本題
PythonでKivyアプリを作成すると「ImportError」が出力されるという記事を書いたのですが、その後、64bit版のWindows10に、32bit版のPython 3.7.9をインストール。インストール後、virtualenvで、新しい仮想環境を作成。
py -3.7-32 -m pip install "kivy[base] @ https://github.com/kivy/kivy/archive/master.zip"
作成後、上記のコマンドで、kivyv2.1.0.dev0もインストール。(参考:Kivy 2.0.0 , python 3.9 error: [CRITICAL] [Window ] Unable to find any valuable Window provider)
■コード
import kivy kivy.require("2.0.0") from kivy.app import App from kivy.uix.label import Label class MyApp(App): def build(self): return Label(text="test") if __name__ == "__main__": MyApp().run()
インストール後、上記のスクリプトを「main.py」とし、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみました。
[INFO ] [Logger ] Record log in C:\Users\user_\.kivy\logs\kivy_21-10-26_43.txt [INFO ] [deps ] Successfully imported "kivy_deps.gstreamer" 0.3.1 [INFO ] [deps ] Successfully imported "kivy_deps.angle" 0.3.0 [INFO ] [deps ] Successfully imported "kivy_deps.glew" 0.3.0 [INFO ] [deps ] Successfully imported "kivy_deps.sdl2" 0.3.1 [INFO ] [Kivy ] v2.1.0.dev0 [INFO ] [Kivy ] Installed at "C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\kivy\__init__.py" [INFO ] [Python ] v3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:01:55) [MSC v.1900 32 bit (Intel)] [INFO ] [Python ] Interpreter at "C:\Program Files (x86)\Python37-32\python.exe" [INFO ] [Logger ] Purge log fired. Processing... [INFO ] [Logger ] Purge finished! [INFO ] [Factory ] 189 symbols loaded [INFO ] [Image ] Providers: img_tex, img_dds, img_pil (img_sdl2, img_ffpyplayer ignored) [INFO ] [Text ] Provider: pil(['text_sdl2'] ignored) [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 - ImportError: DLL load failed: 指定されたモジュールが見つかりません。 File "C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\kivy\core\__init__.py", line 63, in core_select_lib fromlist=[modulename], level=0) File "<frozen importlib._bootstrap>", line 1086, in __import__ File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\kivy\core\window\window_sdl2.py", line 28, in <module> from kivy.core.window._window_sdl2 import _WindowSDL2Storage [CRITICAL] [App ] Unable to get a Window, abort.
実行してみましたが、結局、前回と同じように、エラーが発生し、アプリを実行できませんでした。「sdl2 – ImportError: DLL load failed」や「from kivy.core.window._window_sdl2 import _WindowSDL2Storage」といった出力されているので、これについて調べてみましたが、解決方法らしきものが、中国のWebサイトに公開されており、これも試したが、アプリは実行できませんでした。
さらに「Stack Overflow」で調べてみると、同じように「from kivy.core.window._window_sdl2 import _WindowSDL2Storage」と出力されてアプリが実行できないケースがいくつか発生していることを確認。確認し、いくつかの投稿内容から解決方法を探りましたが、回答されている内容からこれといった解決方法が示されていない、もしくは解決方法を既に試しているが、改善できないものが多かった。
そのため、32bit版のPython 3.7.9でkivyバージョンv2.1.0.dev0を使用しアプリの作成を行い、実行することは、泥沼にはまるような感じがしたので、断念しました。断念はしましたが、「Stack Overflow」で調べた中に、解決方法らしきものを発見しました。
それがこちら(https://stackoverflow.com/questions/66993681/kivy-unable-to-get-a-window-abort)です。この質問に対する回答者は、今回発生したエラーと同じようなことで悩んでいるユーザーで、PyCharmを使用し、インストールしたkivyモジュールと古いkivyプロジェクト及びファイルをすべて削除し、3.6バージョンのpythonをインストールし、新しい仮想環境を作成し、プロジェクトのインタープリタを3.6バージョンに設定。設定後、グローバルなpythonモジュールがないことを確認し、PyCharmの機能を使用し、kivyモジュールをインストールすると、改善できたというものです。
今後、予定ではありますが、こちらの方法でアプリを作成し実行できるのかの検証を行いたいと思います。
コメント