Pythonでデスクトップアプリを作りたい!!
今回は、PythonのKivyというライブラリを使ってデスクトップアプリを作るまでの過程でハマったことをまとめます。
本当はWEBの技術でUIを作れるElectronを使うつもりだったのですが、完成したアプリケーションのパッケージ化がうまくいかず挫折したため、Kivyに乗り換えました。
Electronに挫折した話はそのうち別の記事で公開しようと思います。
今回のゴールはこちら。
kivyチュートリアルのゲームできた!!
環境構築からたった数時間でここまで作れるなんておどろきー!https://t.co/gnjnota3rJ pic.twitter.com/eMD1wsGJJD— カシワバユキ (@yuki_kashiwaba) 2019年1月9日
Kivyの環境構築から、公式チュートリアルのPongゲーム作成までの過程をまとめます。
このKivy、環境構築に少し癖はありましたが、なんとインストールしてからたったの数時間でここまで作ることができました。
非常に使いやすいライブラリなので、ぜひ使ってみてください。
もくじ
環境
環境構築の前に、ざっくり僕の環境を紹介しておきます。
OS:Ubuntu18.10
Python:Python3.7
OSはLinuxですが、Kivyはpipを使ってれたので、WindowsやMacの方でも大きくは変わらないんじゃないかと思います。
開発環境構築
基本的にはこちらのサイトの手順通りにやればいけると思います。
普通にpip install kivyで問題ないのですが、kivyを動かすのに必要なモジュールがいくつかあり、それをきちんと入れないとこんな感じのエラーが返ってきます。
(twitterWebApi) kashiwaba_yuki@KashiwabaYuki:~/twitterWebApi$ pip install kivy Collecting kivy Using cached https://files.pythonhosted.org/packages/7d/8b/89d220b7f96dc2662b81319067f679b4cd73cda66f4aa850db5b6c6cfc7a/Kivy-1.10.1.tar.gz Complete output from command python setup.py egg_info: Using distutils Cython is missing, it's required for compiling kivy ! Traceback (most recent call last): File "", line 1, in File "/tmp/pip-install-6czc7lnb/kivy/setup.py", line 232, in from Cython.Distutils import build_ext ModuleNotFoundError: No module named 'Cython' ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-6czc7lnb/kivy/
Cython、Pygame、Pillowの3つのパッケージが必要みたいです。
こちらのサイトも参考になります。
必要なモジュールを揃えたら再チャレンジ。
下のようなログが出れば成功です。
(twitterWebApi) kashiwaba_yuki@KashiwabaYuki:~/twitterWebApi$ pip install CythonCollecting Cython Downloading https://files.pythonhosted.org/packages/25/63/14ded19bc584405b7633a3ba8e2019f2126f214eca2a88b79b2d71e6aae4/Cython-0.29.2-cp37-cp37m-manylinux1_x86_64.whl (2.1MB) 100% |████████████████████████████████| 2.1MB 3.9MB/s Installing collected packages: Cython Successfully installed Cython-0.29.2 (twitterWebApi) kashiwaba_yuki@KashiwabaYuki:~/twitterWebApi$ pip install kivy Collecting kivy Using cached https://files.pythonhosted.org/packages/7d/8b/89d220b7f96dc2662b81319067f679b4cd73cda66f4aa850db5b6c6cfc7a/Kivy-1.10.1.tar.gz Collecting Kivy-Garden>=0.1.4 (from kivy) Downloading https://files.pythonhosted.org/packages/7d/68/decaee596ff8168a39432eb3949fc7c0be952ebb9467806823bffc165d48/kivy-garden-0.1.4.tar.gz Collecting docutils (from kivy) Downloading https://files.pythonhosted.org/packages/36/fa/08e9e6e0e3cbd1d362c3bbee8d01d0aedb2155c4ac112b19ef3cae8eed8d/docutils-0.14-py3-none-any.whl (543kB) 100% |████████████████████████████████| 552kB 5.5MB/s Collecting pygments (from kivy) Downloading https://files.pythonhosted.org/packages/13/e5/6d710c9cf96c31ac82657bcfb441df328b22df8564d58d0c4cd62612674c/Pygments-2.3.1-py2.py3-none-any.whl (849kB) 100% |████████████████████████████████| 849kB 4.3MB/s Collecting requests (from Kivy-Garden>=0.1.4->kivy) Downloading https://files.pythonhosted.org/packages/7d/e3/20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/requests-2.21.0-py2.py3-none-any.whl (57kB) 100% |████████████████████████████████| 61kB 13.1MB/s Collecting idna<2.9,>=2.5 (from requests->Kivy-Garden>=0.1.4->kivy) Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB) 100% |████████████████████████████████| 61kB 17.6MB/s Collecting urllib3<1.25,>=1.21.1 (from requests->Kivy-Garden>=0.1.4->kivy) Downloading https://files.pythonhosted.org/packages/62/00/ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/urllib3-1.24.1-py2.py3-none-any.whl (118kB) 100% |████████████████████████████████| 122kB 7.9MB/s Collecting certifi>=2017.4.17 (from requests->Kivy-Garden>=0.1.4->kivy) Using cached https://files.pythonhosted.org/packages/9f/e0/accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/certifi-2018.11.29-py2.py3-none-any.whl Collecting chardet<3.1.0,>=3.0.2 (from requests->Kivy-Garden>=0.1.4->kivy) Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB) 100% |████████████████████████████████| 143kB 6.3MB/s Building wheels for collected packages: kivy, Kivy-Garden Running setup.py bdist_wheel for kivy ... done Stored in directory: /home/kashiwaba_yuki/.cache/pip/wheels/34/f6/e9/b788852a1dc5ca691d0173cbbca7dcda2124014192d239cb23 Running setup.py bdist_wheel for Kivy-Garden ... done Stored in directory: /home/kashiwaba_yuki/.cache/pip/wheels/e5/09/36/4bec048252175b6aa7ba75441cbeed8f31a0bea37abedcfed0 Successfully built kivy Kivy-Garden Installing collected packages: idna, urllib3, certifi, chardet, requests, Kivy-Garden, docutils, pygments, kivy Successfully installed Kivy-Garden-0.1.4 certifi-2018.11.29 chardet-3.0.4 docutils-0.14 idna-2.8 kivy-1.10.1 pygments-2.3.1 requests-2.21.0 urllib3-1.24.1
もしどうしてもうまくいかない場合は、一度自分の環境のパッケージを確認してみるといいかもしれません。
コマンドは、pip freeze です。
pythonで現在の環境にインストールされているパッケージの一覧取得
さて、無事に環境構築が終わったらいよいよチュートリアルです。
チュートリアル
Kivyチュートリアルは、日本語化もされてるのでわかりやすいです。
最悪ソースコードをコピペすれば、最初に紹介した完成形は出来上がります。
まとめ
環境構築からチュートリアルまでさくっと3時間くらいで終わりました。
Kivyはマルチプラットフォーム対応らしいので、これから色々アプリケーション作っていきたいです。
とりあえず今回の記事はメモ書き程度に、これからオリジナルアプリを作っていく過程なんかをまとめていこうと思います。