最近は機械学習の勉強に向け、ちょこっとpythonを触り始めました。
今回はCentOS 7でのpython環境の構築について整理します。
環境
- CentOS 7.2
- python 3.5.2
- VirtualBox 5.1.8
1. IUS Community Project のリポジトリを追加する
python 3系はCentOS 7のリポジトリでは提供されていないので、別途リポジトリを登録する必要があります。
# yum install -y https://centos7.iuscommunity.org/ius-release.rpm
ただ普段は使わないリポジトリなので、無効に変更して使用したい場合のみ使用するようにします。
# vim /etc/yum.repos.d/ius.repo
[ius]
enabled=1
↓
enabled=0
2. 最新のpythonをインストールする
iusで提供されている最新は3.5.2でしたので、今回はそれを使用します。
# yum clean all
# yum install --enablerepo=ius -y python35u python35u-libs python35u-devel python35u-pip
ただ、このままではデフォルトで入っているpythonにパスが向かっている状態なので、2系を指しています。
$ python --version
Python 2.7.5
なぜこのようになっているかというと、以下のようにエイリアスが貼られているからです。
# ls -l /bin/python
lrwxrwxrwx 1 root root 7 12月 17 17:56 /bin/python -> python2
# ls -l /bin/python2
lrwxrwxrwx 1 root root 9 12月 17 17:56 /bin/python2 -> python2.7
# ls -l /bin/python3*
-rwxr-xr-x 2 root root 11304 6月 28 2016 /bin/python3.5
lrwxrwxrwx 1 root root 26 1月 1 20:02 /bin/python3.5-config -> /usr/bin/python3.5m-config
-rwxr-xr-x 2 root root 11304 6月 28 2016 /bin/python3.5m
-rwxr-xr-x 1 root root 173 6月 28 2016 /bin/python3.5m-config
-rwxr-xr-x 1 root root 3398 6月 28 2016 /bin/python3.5m-x86_64-config
ここで注意ですが、pythonを3系にシンボリックリンクの貼り直しはNGです。
貼り替えてしまうと、python2系を使用している諸々が動かなくなってしまいます。
例えば、yumが使えなくなったります。こんなエラーとか出ます。
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e:
^
なので、3系を使用する場合はとりあえず以下のようにして使ってみます。
(普通はどう使うのが良いのか?pyenvとか使ったほうが良いのかな?)
# ln -s /bin/python3.5 /bin/python3
# python3 --version
Python 3.5.2
pipも2.7にパスがとおっているので。
# ln -s /bin/pip3.5 /bin/pip3
# pip3 --version
pip 9.0.1 from /usr/lib/python3.5/site-packages (python 3.5)
3. 外部ライブラリ NumPyとMatplotlibをインストールする
今回は勉強のために、多次元配列を提供する「NumPy」とグラフの描画やデータの可視化できる「Matplotlib」を使用します。
Matplotlibをimportするためには以下のパッケージも必要なのでインストールします。
# yum install --enablerepo=ius -y python35u-tkinter
続いて、NumPyとMatplotlibをインストールします。
# pip3 install numpy matplotlib
準備はこれで完了しました。
あとはこういうスクリプトを書いて動かせばグラフが出力できます。
1 #!/bin/python3
2 import numpy as np
3 import matplotlib.pyplot as plt
4
5 x = np.arange(0,6,0.1)
6 y = np.sin(x)
7
8 plt.plot(x, y)
9 plt.show()
GUI環境でない場合の対処
SSHでリモートからの接続等GUI環境でない場合、上記のスクリプトのplt.plot(x, y)部分の実行で以下のエラーが出ると思います。
_tkinter.TclError: no display name and no $DISPLAY environment variable
以下の対処が考えれます。
対処1:グラフをファイルで出力する
まずはpythonの設定を変更します。
38 backend : tkagg
↓
38 #backend : tkagg
39 backend : agg
上記の修正と合わせて、スクリプト「sample-graph.py」の最後の1行を以下のように修正します。
8 plt.show()
↓
8 plt.savefig('sample-graph.png')
これで指定したグラフをファイルに出力することができます。
対処2:GUIで操作する
sshでリモートから接続している場合は、直接マシンを操作するか。
マシンがCUIになっていれば、以下のコマンドでGUIに変更して操作するか。あとは良しなに!
# systemctl isolate graphical.target
さいごに
これで勉強するのに必要なpythonの環境構築はできたと思います。
(環境の準備で意外と時間を食ってしまった。。。)