今月から内輪の勉強会を始めたのですが、そこで勉強対象となりそうなのが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配下にディレクトリが残ることがあるので、それも削除します。