CentOS6.3にPythonの学習環境を作る

今月から内輪の勉強会を始めたのですが、そこで勉強対象となりそうなのがPythonでした。
日本ではRubyよりも希少性がありそうだし・・・という、少々そろばんのはじかれた選定理由ですが、それはさておき。

なんぶんPythonの知識が全くないもので、行き当たりばったりなのですが、とりあえずは学習環境を作らなければならない。まずはさくらのVPS上で動かしているCentOS(実際はScientificLinuxなんだけど、ほとんど同じなので有名どころのCentOSでということにしておく)で、環境を作ってみました。
Mac編もそのうちやるのではないかと思います。

Pythonはyumで使われている!

これは極めて重要なポイントです。

CentOS6.3ではデフォルトでPython2.6.6が入っています。Pythonはこの記事の執筆時点で3.2.4、3.3.1のPython3系と、2.7.4のPython2系が現行バージョンです。なので、Python2系で見ても少し古いバージョンが入っていることになります。

となると、最新バージョンに上げたいところですね。しかし、CentOS(RHEL/Fedora)系でパッケージ管理のために使われているyumは、Pythonで出来ているらしいのです。pythonのバージョン上げるとyumが動かなくなった – ike-daiの日記なんていう記事も見つかりますし、ここで安易にデフォルトのPythonを上書きしてしまうことは避けた方が良さそうです。

Python3系かPython2系か

いろいろ調べてみると、Python3系とPython2系は結構違うようです。
ふつうに考えれば、これから勉強するのならより新しいPython3系で行くべきだと思います。
ただ、Pythonを学ぶ以上はやりたいのはGoogle App Engineで動作するアプリを作ることであり、Google App Engine について – Google App Engine — Google Developersによると、Python3のサポートは「将来のリリースでサポートすることを検討」となっています。

ということで、今回はPython2.7.4をインストールします。

Python2.7.4のインストール

インストールについては、忘れるためのメモ: CentOS 6.2 に Python 2.7.2をインストールするを参考にしました。

sudo yum install zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel
wget http://www.python.org/ftp/python/2.7.4/Python-2.7.4.tgz
tar xvzf Python-2.7.4.tgz
cd Python-2.7.4
./configure --with-threads --enable-shared --prefix=/usr/local
make
sudo make install
sudo ln /usr/local/lib/libpython2.7.so.1.0 /lib64/

prefixで指定しているように、/usr/local/bin/python でPythonを起動できます。/usr/local/binへのパスを、~/.bashrcに追記しておきます。

easy_installをインストール

Pythonのライブラリ管理ツールにeasy_installがあります。どうやらその後継としてpipがあるようなのですが、pipのインストールにeasy_installを使うので、結局必要になります。

su - #rootになっておく
wget http://peak.telecommunity.com/dist/ez_setup.py
/usr/local/bin/python2.7 ez_setup.py

これでインストールできます。/usr/local/bin/python2.7(/usr/local/bin/pythonからシンボリックリンクされたPython2.7の本体)を使ってインストールしたので、/usr/local/bin/easy_installにインストールされているはずです。
もし、/usr/bin/easy_installしかなかったら、それはCentOSに元から入っているPython2.6によるものですので、やり直す必要があります。

pipをインストール

sudo easy_install pip

easy_installのインストールが正常に終わっていれば、ここはスムースに進むはずです。

virtualenvをインストール

Pythonは、../lib/pythonx.yをライブラリとして認識します。今回の例でいうと、/usr/local/lib/python2.7がライブラリ用のディレクトリです。
ただ、ここに入ったモジュールはグローバルで使用されることになるので、Pythonで複数のアプリを作るようになると、モジュールのバージョン違いとかの問題が起こることが予想されます。
Rubyだとrbenvとかrvmがあるのですが、Pythonにはvirtualenvというのがあります。
(厳密に言うと、rvmはRubyそのもののバージョンも管理出来るので、ちょっと違います。virtualenvではPythonそのもののバージョンは管理出来ないようです。)

sudo pip install virtualenv

これでインストール出来ます。

virtualenv ~/Dropbox/dev/python_test
cd ~/Dropbox/dev/python_test
ls # => bin include lib と3つのディレクトリが表示されるはず
source bin/activate

virtualenvコマンドを実行すると、引数として指定したディレクトリが自動的に作成され、その中に、bin、include、libの3つのディレクトリが出来ます。
source bin/activate とコマンドを実行すると、仮想環境に入ります。プロンプトの先頭に(python_test)のような環境名が表示されるます。

virtualenvwrapperをインストール

virtualenvの操作を簡単にするためにvirtualenvwrapperというモジュールがあります。

sudo pip install virtualenvwrapper

インストールはこれでOK。で、これを使うにはどうするか?
インストールされたスクリプト(/usr/local/bin/virtualenvwrapper.sh)に説明が書いてありました。

mkdir $HOME/.virtualenvs

~/.bashrcに下記の設定を追加します。

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

シェルを再起動するか、source ~/.bashrcで読み込んでから、workonを実行すると仮想環境の一覧が表示されます。(インストール直後なので、何も表示されない)

mkvirtualenv temp

とすると、~/.virtualenvs/tempというディレクトリが作成され、virtualenvと同じように配下のディレクトリが作成されます。

workon temp #temp環境の有効化
deactivate #仮想環境の無効化
rmvirtualenv #仮想環境の削除

あとは、このように環境の切り替えが出来ます。

Tips

easy_installしたパッケージの削除

easy_installコマンド自体にはアンインストール機能がありません。
そこで、下記のようにします。(例として、pipをアンインストールする場合)

su - #rootになる
easy_install --record files.txt pip
cat files.txt | xargs rm -rvf

easy_installのrecordオプションを付けると、インストールしたファイルの一覧が記録されます。
一旦、同じコマンドを再インストールしてファイル一覧を取得し、それを削除するという流れです。

また、/usr/local/lib/python2.7配下にディレクトリが残ることがあるので、それも削除します。

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。2018年、株式会社ビビンコを北九州市に創業。IoTソリューションの開発・導入や、画像認識モデルを活用したアプリの開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。