UbuntuへのKivyのInstall

KivyのInstallは少々面倒くさいですね。いわゆる`pip`だけでサクッと入れられる類の物ではないので。

# Ubuntuのversion選択

経験豊富なLinux利用者でないのなら、LTS(LongTimeSupport)版を選んだ方がいいでしょう。どのLTS版を選ぶかですが、現在だと18.04LTSが最適だと思います。

<!--
Window systemの選択

詳しくは知らないのですが、Linux向けのWindow systemとしては

- 従来からのX Window System
- 新しいWayland

の2種があるようです。そしてKivyは現状X Window Systemでしか動かないらしいので必ずX Window Systemが有効な状態にしてください。16.04LTSを使っているのならそもそもX Window Systemしか入っていはずなので、特にすることはないです。18.04LTSなんですが両方入っているらしいのでWaylandを選ばないよう注意してください。
-->

# apt-getで必要な物を入れる

まんま[公式](https://kivy.org/doc/master/installation/installation-linux-venvs.html#dependencies-with-sdl2)に書いてあるとおりです。

```
sudo apt-get install -y \
    python-pip \
    build-essential \
    git \
    python \
    python3 \
    python-dev \
    python3-dev \
    ffmpeg \
    libsdl2-dev \
    libsdl2-image-dev \
    libsdl2-mixer-dev \
    libsdl2-ttf-dev \
    libportmidi-dev \
    libswscale-dev \
    libavformat-dev \
    libavcodec-dev \
    zlib1g-dev

# Install gstreamer for audio, video (optional)
sudo apt-get install -y \
    libgstreamer1.0 \
    gstreamer1.0-plugins-base \
    gstreamer1.0-plugins-good
```

- `ffmpeg`のInstallに失敗する場合は代わりに`libav-tools`を入れてください。
- gstreamerに関する物は任意ですが入れておいたほうが読み込める動画や音声の種類が増えていいです。

# SDL2のversionとIME

SDL2の[WhatsNew.txt](https://github.com/letoram/SDL2/blob/master/WhatsNew.txt)を見てください。 **LinuxのIMEの一つであるIBusに対応したのはversion2.0.4からでFcitxに対応したのはversion2.0.5からなのが分かると思います** 。なので使用しているIMEに対応したversionのSDL2が入っているか確かめる必要があります。

現在入っているSDLのversionを確認

`dpkg -l *libsdl2*`と打ちます。私の環境での出力が以下で

```
(読みやすいように省略,整形しています)
ii  libsdl2-2.0-0:amd64          2.0.4+dfsg1-2ubuntu2
ii  libsdl2-dev                  2.0.4+dfsg1-2ubuntu2
ii  libsdl2-image-2.0-0:amd64    2.0.1+dfsg-2+deb9u1build0.16.04
ii  libsdl2-image-dev:amd64      2.0.1+dfsg-2+deb9u1build0.16.04
ii  libsdl2-mixer-2.0-0:amd64    2.0.1+dfsg1-1
ii  libsdl2-mixer-dev:amd64      2.0.1+dfsg1-1
ii  libsdl2-ttf-2.0-0:amd64      2.0.14+dfsg1-1
ii  libsdl2-ttf-dev:amd64        2.0.14+dfsg1-1
```

SDL2のversionが2.0.4である事が分かります。私はIBusを使っているのでこのままで問題ないでしょう。もし必要なversionに満てないのなら、repositoryにある物のversionが古いということになるので、ソースからbuildしないといけません。その場合は[ここ](https://wiki.libsdl.org/Installation)を参考に以下のコマンドでinstallでします。

```
hg clone https://hg.libsdl.org/SDL SDL
cd SDL
mkdir build
cd build
../configure
make
sudo make install
```

`hg`コマンドが使えない場合は`sudo apt-get install mercurial`としてください。尚、他の物(`mixer`, `image`, `ttf`)は下手にupdateしないほうが良いです。私は一度全てを最新版にしてKivyが動かなくなった経験があるので。

# 使いたいKivyのversionに合わせたversionのcythonを入れる

(ここからの作業は全てpipenvやvenvで用意した仮想環境上で行います)。

[ここ](https://kivy.org/doc/master/installation/installation-linux-venvs.html#cython)を参考に適切なversionのcythonを入れます。もし現在の最新安定版(Kivy1.11.0)を入れたいならcython0.29.9を入れてください。

```
pipenv install cython==0.29.9
又は
pip install cython==0.29.9
```

cythonが必要なのはkivyのinstall時であって実行時ではないので、kivyのinstall後はuninstallしたり別のversionを入れ直しても大丈夫です。

# KivyをInstall

これでようやくKivyのInstallに入れます。

```
pipenv install kivy==1.11.0
又は
pip install kivy==1.11.0
```

また任意で以下のpackageも入れておきます。

- pillow 入れておくと読み込める画像の種類が増えるのだと思います。最近はこれがないとKivyが動かない事が多いので任意じゃなく必須かもしれません。
- watchdog [kviewer](https://qiita.com/gotta_dive_into_python/items/c32cdcb58c66f0a1b840)を使いたいなら要ります
- pygments `CodeInput`というwidgetのSyntaxHighlight機能を使いたいなら要ります