unoh.github.com

2009年版Python開発環境を整えよう

Wed Dec 02 23:49:47 -0800 2009

なでしこの作者じゃない方のsakatokuです。

以前書いた「Python開発環境を整えよう」という記事からだいぶ時間が経ってしまったので、内容を更新したいなぁと思っていたのですが、ようやくその機会が来ました。

virtualenvで開発環境をつくる

開発環境をつくるにあたって次のような問題が生じると思います。

以前の記事ではvirtual-pythonという解決策を紹介しましたが、現在ではvirtualenvというツールが広く使われるようになってきています。

virtualenvをインストールするには、もしroot権限があるならば、CentOS/Fedoraの場合、

$ sudo yum install python-setuptools

でsetuptoolsというPythonパッケージ配布ライブラリを入れて、setuptoolsに含まれているeasy_installコマンドを使い、

$ sudo easy_install virtualenv
$ which virtualenv
/usr/bin/virtualenv

で入れるのが楽です。

一般ユーザの権限でvirtualenvを利用するには、適当なディレクトリに最新版のvirtualenv(1.4.3以降)の配布物をダウンロードし、その配布物に含まれるvirtualenv.pyを叩くのが簡単です。最新版の1.4.3以降を薦める理由はpipというツールが同梱されるようになったことにありますが、これに関しては後述します。

$ wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.4.3.tar.gz
$ tar xzf virtualenv-1.4.3.tar.gz
$ cd virtualenv
$ python virtualenv.py --python=/usr/bin/python2.4 ~/mypython

上の例では、最後の行で~/mypythonというディレクトリにPython2.4の仮想開発環境を作成しています。--pythonオプションで利用するPythonのバイナリを指定します。"~/mypython"は、virtualenvで作る仮想的なPython環境のパスですが、これは好みに合わせて何にしても構いません。

もし、/usr/local/bin/python2.5にPython2.5がインストールされている環境で、そのPython2.5を使った仮想環境を~/mypythonというパスに作りたいならば、以下のようにします。

$ python virtualenv.py --python=/usr/local/bin/python2.5 ~/mypython

実際にこれらの開発環境に切り替えるには、仮想環境ディレクトリにbin/activateというシェルスクリプトがあるのでそれを使います。

$ source ~/mypython/bin/activate
$ which python
~/mypython/bin/python
$ python
Python 2.5.4 (r254:67916, Nov 28 2009, 20:37:01)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

この環境をカスタマイズした場合には、仮想環境ディレクトリにlib/python2.4/site-packages/sitecustomize.pyというファイルを作り、そこで固有の設定を行います。よく行われるのは、デフォルトのエンコーディングの指定です。

cat << END > ~/mypython/lib/python2.5/site-packages/sitecustomize.py
heredoc> import sys
heredoc> sys.setdefaultencoding("utf-8")
heredoc> END

pipを使ってパッケージを管理する

仮想環境を作ると、仮想環境以下のbinディレクトリにpipというコマンドもインストールされます。

$ source ~/mypython/bin/activate
$ which pip
~/mypython/bin/pip

このpipは、Pythonで長らく主流となってきたsetuptools/easy_installに替わって最近使われるようになってきたパッケージ管理ツールで、PHPで言えばpear、Rubyで言えばgem、Perlで言えばcpanコマンドに相当します。

pipを使ってPythonパッケージをインストールするには、次のように"pip install <パッケージ名>"と入力します。インストールするパッケージが依存している別のパッケージがあれば、それもインストールしてくれます。

$ pip install Django

pipはデフォルトでは、Python Package Index(通称PyPI)に登録されているパッケージをインストールしますが、URLを指定して直接インストールすることもできます。次の例は、Pythonの標準的な画像処理ライブラリであるPILを、tar.gzからインストールする例です。

$ pip install http://effbot.org/downloads/Imaging-1.1.6.tar.gz

インストール済みのパッケージを確認するには、freezeコマンドが利用できます。

$ pip freeze
IPy==0.70
PIL==1.1.6
uamobile==0.2.8
virtualenv==1.4.3
wsgiref==0.1.2

最新版のpipではuninstallコマンドを使ってパッケージのアンインストールもできるようになりました。

$ pip uninstall IPy

pipのコマンドを確認するには、helpコマンドを使います。helpの後にコマンド名を続けると詳細な内容を確認できます。

$ pip help
$ pip help install

virtualenvwrapperを使って開発環境を切り替える

virtualenvとpipを使えば、プロジェクト毎に仮想環境を作っておけば、別のバージョンのライブラリを利用することができます。

# project1という環境を作る
$ python virtualenv.py --python=/usr/bin/python2.5 ~/project1
# 切り替え
$ source ~/project1/bin/activate
# 必要なライブラリをインストール
$ pip install "Django==1.0.4"
# project2という環境を作る
$ python virtualenv.py --python=/usr/bin/python2.5 ~/project2
# 切り替え
$ source ~/project2/bin/activate
# 別のバージョンのライブラリをインストール
$ pip install "Django==1.1.1"

相互の開発環境の切り替えはactivateを使うことになりますが、同時にたくさんの環境を使っていると、いちいち"source ~/project1/bin/activate"を打つのが面倒になってきます。

そんな状況で便利なのがvirtualenvwrapperです。

$ wget http://www.doughellmann.com/downloads/virtualenvwrapper-1.21.tar.gz
$ tar xzf virtualenvwrapper-1.21.tar.gz
$ cd virtualenvwrapper-1.21

virtualenvwrapperは普通のPythonパッケージのように配布されていますが、実態はvirtualenvwrapper_bashrcというシェルスクリプトです。このvirtualenvwrapper_bashrcを.bashrcや.zshrcで読み込むことにより、virtualenvを使った開発を便利にするいくつかのコマンドが使えるようになります。virtualenvwrapper_bashrcという名前になっていますが、zshでも使えます。僕の場合は、

$ cp virtualenvwrapper_bashrc ~/.virtualenvwrapperrc

のように、ドットつきでファイル名を改名してホームディレクトリ直下に置き、.zshrcで、

# Import virtualenvwrapper
if [ -f ~/.virtualenvwrapperrc ]; then
  source ~/.virtualenvwrapperrc
fi

のように読み込むようにしています。さらに、$HOME/.virtualenvsという仮想環境を置くディレクトリが必要なのであらかじめ作成しておきます。

$ mkdir ~/.virtualenvs

もしこのディレクトリを変更したい場合は、WORKON_HOMEという環境変数を定義することで変更できます。

virtualenvwarrperを読み込むと、ターミナル上で、

$ mkvirtualenv --python=/usr/bin/python2.5 temp

のようにして、仮想環境を作り

$ workon temp

のように"workon (仮想環境名)"と打つと、その開発環境に切り替えてくれるので便利です。その仮想環境を無効にするには、

$ deactivate

のようにdeactivateを使います。

もし、ある仮想環境が必要なくなったならば、deactivateを使って一度その環境を離れた上で、rmvirtualenvコマンドを使って削除することができます。

$ deactivate
$ rmvirtualenv temp

普段の開発では、

$ workon project1

のようにしてproject1の開発に切り替え、いつも通りコードを書いたり、テストを行って、もし別のproject2のタスクをする必要が出た場合には、

$ workon project2

のようにしてproject2の開発に切り替え...のようにして作業を進めています。

virtualenvwrapperは非常に便利なのですが、PATHが通った場所にvirtualenvがないとmkvirtuanenvコマンドはエラーになり実行できません。もし、いつもPATHが通っている場所にvirtualenvコマンドをインストールできるならば、その解決方法がいいような気がしますが、$WORKON_HOMEに手動で「仮想環境を作るための仮想環境」を作れば一応は解決できます。

$ mkdir ~/.virtualenvs
$ python virtualenv.py --python=/usr/bin/python2.4 ~/.virtualenvs/bootstrap
$ source ~/.virtualenvs/bootstrap/bin/activate
$ pip install virtualenv
$ mkvirtualenv mypython

書き残していること

以上駆け足で、Python開発環境を整えるための三種の神器、virtualenv、pip、virtualenvwrapperを紹介しましたが、ぱっと考え付くだけでも、まだ言及していないことがたくさんあります。

こうした点についても、今後この場をかりて紹介していければと思っています。