Archlinuxでpyenvを使いつつmatplotlibを動かす
Archlinuxでmatplotlibを使いたい場合、pacmanに用意されたパッケージを利用すれば簡単にグラフが出せます。たぶん。
ただそれを自分で入れたpyenvの環境でやりたかったがためのメモ
なぜmatplotlib
今回はO'Reilly Japan - 実践 機械学習システムの環境を整えました。
まずは本の内容通りにコードを書いて表示しよう!と思ったのですがまったく結果が表示されない。
原因がわからない。
GUIに利用できるライブラリがないんじゃないかこれと思い、とりあえずQtバインディングのライブラリを入れました。
Pythonとmatplotlib
matplotlibはPythonで利用可能なプロットツールです。 プロットツールということで、プロットしたものを表示するGUI環境が必要です。 今回はQtを利用することにし、QtとPythonについて調べました。
PythonとQt
QtはC++から利用なGUIフレームワークです。
(これでキュートと読むらしい。今までキューティーと読んでた…)
C++から利用可能なものをPythonで利用するということは、つまりバインディングされているわけで、
よくあるパターンですが、Qtを使うための複数のライブラリが存在しています。
代表的な2つとして挙げられるのが
- PyQt
- PySide
のようです(要出典)
PyQt
PyQtはpip
でインストールできません
そしてライセンスがGPL
です(商用ライセンスもある)。
ちょっと使いづらいですね。
ただ、現状Qt5を利用できるのはPyQtだけのようです(PyQt5)
Qt5をつかうため+後述の理由があったため、今回はPyQt5を入れました。
Qt5使う理由は特になくて新しい物使っとこうかな程度です。
PySide
PySideはpip
でインストールできます
そしてライセンスがLGPL
です。PyQtよりも使いやすいですね。
今回PyQtを使うに至った大きな理由は、PySideがまだPython3.5で利用できなかったためです。
Python詳しくないですがなんとなく新しい物使いたい病なので苦労しながらPyQt入れました。
導入する
2つのライブラリ(SIP、PyQt5)をダウンロード、コンパイル、インストールします。
SIPはPythonから簡単にC++ライブラリを使えるようにするライブラリ(Riverbank | Software | SIP | What is SIP?)
で、PyQtが依存しています。
なのでSIPから先にインストールします。
wget http://sourceforge.net/projects/pyqt/files/sip/sip-4.17/sip-4.17.tar.gz tar zxf sip-4.17.tar.gz cd sip-4.17 python3 configure.py make make install
SIPはすんなり入るはずです。次にPyQtを入れましょう。
事前にpacman
かyaourt
を使ってqt5-base
パッケージをインストールしておいてください。
wget http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.5.1/PyQt-gpl-5.5.1.tar.gz tar zxf PyQt-gpl-5.5.1.tar.gz cd PyQt-gpl-5.5.1 python3 configure.py make sudo make install
どうやら共有ライブラリをシステム領域に入れるらしく、sudo
がないとインストールできません。
(インストール場所指定しておけばよかったなと後で思いました)
これでライブラリの導入は完了です。
設定ファイル
ライブラリは入ったはずなのに相変わらずmatplotlibでplotができず、しばらくうんうん唸ってました。 どうやら、matplotlib用のconfigファイルがあるらしいです。
import matplotlib
matplotlib.matplotlib_fname()
で現在読み込まれているconfigファイルの場所がわかります。
$HOME/.config/matplotlib
に設定ファイルを置くと読んでくれるらしいので、最初に読み込まれていたconfigファイルを複製して$HOME/.config/matplotlib/matplotlibrc
として読み込ませ、その内容を一部書き換えました。
書き換えた場所
--- $HOME/.pyenv/versions/3.5.0/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc 2015-12-13 18:54:09.000000000 +0900 +++ $HOME/.config/matplotlib/matplotlibrc 2015-12-14 07:46:21.760050011 +0900 @@ -35,7 +35,7 @@ # You can also deploy your own backend outside of matplotlib by # referring to the module name (which must be in the PYTHONPATH) as # 'module://my_backend'. -backend : agg +backend : Qt5Agg # If you are using the Qt4Agg backend, you can choose here # to use the PyQt4 bindings or the newer PySide bindings to
これで無事plotできるようになりました。 最後のconfigファイル書き換えるだけで最初からQt以外使って描画できてた気がする。