概要

Kivyは、オープンソースのPythonのUIライブラリ。
クロスプラットフォームに対応。Android、iOSを含むマルチタッチも提供しているみたいです。
Kivy: https://kivy.org/#home

今回は、Anacondaを使って仮想環境を作り、その中にKivyをインストールして動作確認してみました。
今回の動作確認では、公式ページトップにあるサンプルコード(helloworld.py)を実行して、GUIウィンドウを表示させてみました。

# helloworld.py

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()

環境

以下の環境が整っていることを前提で進めます。

  • Mac OSX El Capitan ver.10.11.6
  • Anaconda ver.3.4

インストール

まずは、Anacondaで仮想環境を構築です。今回は環境名をkivyという名前にしました。
記憶ではPythonのバージョン指定を入れないと、ごっそり色々なものがインストールされてしまうので、忘れないようにしておくのが重要です。
仮想環境構築が終わったら、source activateして作った仮想環境に入ります。

$ conda create -n kivy python=3.6
$ source activate kivy

次に、Kivyのインストールです。公式ガイドを参考に。
conda createで仮想環境を構築すると、自動的にpipが仮想環境中にインストールされているので、pipはすぐ使えるはずです。

公式ガイド: https://kivy.org/docs/installation/installation-osx.html

$ pip install Cython==0.26.1
$ pip install kivy

公式ガイドのとおり、これでインストール終わり、と思って実行するも、エラーが出てしまいました。

$ python helloworld.py
Purge log fired. Analysing...
Purge finished!
[INFO   ] [Logger      ] Record log in /Users/nekog/.kivy/logs/kivy_18-01-02_3.txt
[INFO   ] [Kivy        ] v1.10.0
[INFO   ] [Python      ] v3.6.2 |Continuum Analytics, Inc.| (default, Jul 20 2017, 13:14:59)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]
[INFO   ] [Factory     ] 194 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_imageio, img_dds, img_gif (img_pygame, img_pil, img_ffpyplayer ignored)
[CRITICAL] [Text        ] Unable to find any valuable Text provider.
pygame - ModuleNotFoundError: No module named 'pygame'
  File "/Users/nekog/.pyenv/versions/anaconda3-4.0.0/envs/kivy/lib/python3.6/site-packages/kivy/core/__init__.py", line 59, in core_select_lib
    fromlist=[modulename], level=0)
  File "/Users/nekog/.pyenv/versions/anaconda3-4.0.0/envs/kivy/lib/python3.6/site-packages/kivy/core/text/text_pygame.py", line 12, in <module>
    import pygame

pil - ModuleNotFoundError: No module named 'PIL'
  File "/Users/nekog/.pyenv/versions/anaconda3-4.0.0/envs/kivy/lib/python3.6/site-packages/kivy/core/__init__.py", line 59, in core_select_lib
    fromlist=[modulename], level=0)
  File "/Users/nekog/.pyenv/versions/anaconda3-4.0.0/envs/kivy/lib/python3.6/site-packages/kivy/core/text/text_pil.py", line 7, in <module>
    from PIL import Image, ImageFont, ImageDraw

[CRITICAL] [App         ] Unable to get a Text provider, abort.

モジュール(PIL, pygame)が見つからないとのこと。
PIL (Python Imaging Library)は、開発が止まっており、Python3系では使えない模様。代わりにPILのforkであるPillowを使うのが良いみたいです。

Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lundh and Contributors.
Pillow: https://pillow.readthedocs.io/en/4.3.x/

PIL: http://www.pythonware.com/products/pil/
Pillow: https://pillow.readthedocs.io/en/4.3.x/

kivyをインストールしたのと同様に、pipでインストール。

$ pip install pillow
$ pip install pygame

動作確認

python helloworld.pyでスクリプトを実行。問題なくGUIが立ち上がりました。

Kivyの動作確認実行結果

Kivyの動作確認実行結果

$ python helloworld.py
[INFO   ] [Logger      ] Record log in /Users/nekog/.kivy/logs/kivy_18-01-02_5.txt
[INFO   ] [Kivy        ] v1.10.0
[INFO   ] [Python      ] v3.6.2 |Continuum Analytics, Inc.| (default, Jul 20 2017, 13:14:59)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]
[INFO   ] [Factory     ] 194 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_imageio, img_dds, img_pygame, img_pil, img_gif (img_ffpyplayer ignored)
[INFO   ] [Text        ] Provider: pygame
[INFO   ] [Window      ] Provider: pygame
[INFO   ] [GL          ] Using the "OpenGL ES 2" graphics system
[INFO   ] [GL          ] Backend used <gl>
[INFO   ] [GL          ] OpenGL version <b'2.1 INTEL-10.14.73'>
[INFO   ] [GL          ] OpenGL vendor <b'Intel Inc.'>
[INFO   ] [GL          ] OpenGL renderer <b'Intel(R) Iris(TM) Graphics 6100'>
[INFO   ] [GL          ] OpenGL parsed version: 2, 1
[INFO   ] [GL          ] Shading version <b'1.20'>
[INFO   ] [GL          ] Texture max size <16384>
[INFO   ] [GL          ] Texture max units <16>
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [OSC         ] using <multiprocessing> for socket
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
^[[INFO   ] [Base        ] Leaving application in progress...