MacでのPython開発環境を整理してみる
PythonでのWebサービスの開発、Google App Engineの開発などをしている中で、環境がごちゃごちゃしてきました。そこで、ちょっと環境整理します。方針としては、gaeの開発は2.5をベースに自由にできる別環境を作るという感じです。今後、Python3系も入れることも頭の片隅に入れておきたいとおもいます。
今回の作業では、"http://labs.unoh.net/2007/04/python.html"を参考にさせて頂きました。
レシピ
- virtual-pythonでpython2.5の新しい環境を作る
- sitecustomize.pyを設定する
- 環境設定用のシェルを用意する
- easy_installをインストールする
- PILをインストールする
virtual-pythonでpython2.5の新しい環境を作る
gae用のpython2.5環境は、ユーザディレクトリ配下の~/opt/gaeenvというディレクトリに置くことにします。
virtual-python.pyを取得して、それを使って新しい環境を作ります。
mkdir ~/opt/gaeenv cd ~/opt/gaeenv wget http://peak.telecommunity.com/dist/virtual-python.py python2.5 virtual-python.py --prefix=~/opt/gaeenv --no-site-packages
sitecustomize.pyを設定する
デフォルトエンコーディングをUTF-8にしておきたいため、sitecustomize.pyを作成して配置します。
ただし、site-packagesディレクトリはデフォルトではPYTHONPATHに入っていないようなので、自分で追加する必要がありそうです。その作業は次の作業でおこないます。
vim ~/opt/gaeenv/lib/python2.5/site-packages/sitecustomize.py
import sys sys.setdefaultencoding('utf-8')
環境設定用のシェルを用意する
この作成した環境は必要な時に使えればよいと考えているため、環境変数のメンテをシェルで呼び出しておこなう形にします。そのため、それようのファイルを作成して配置します。やることは、PATHへのパス追加とPYTHONPATHの追加です。
vim ~/opt/gaeenv/setupenv.sh # 呼び出す場合 source setupenv.sh
PWD=`pwd` export PWD export PATH="$PWD/bin:$PATH" echo "Updated PATH->$PATH" export PYTHONPATH="$PWD/lib/python2.5/site-packages" echo "Added PYTHONPATH->$PYTHONPATH"
easy_installをインストールする
上記で作成したシェルを使用してpythonをgaeenvのものにしてから作業をおこないます。
ez_setup.pyを取得して、それを使ってeasy_installをインストールします。
source setupenv.sh wget http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py --prefix=~/opt/gaeenv/ setuptools
PILをインストールする
gaeにて画像系の処理をおこなうために、PILをインストールしておきます。easy_installを使用してPILをインストールします。easy_installのバージョン指定の話は、"Google グループ"を参考にさせて頂きました。
easy_install --prefix=~/opt/gaeenv/ "pil==1.1.6" # 1.1.6インストールできませんでした。。。
仕方が無いので、easy_installでのインストールは諦めてソースからインストールすることにします。
wget http://effbot.org/downloads/Imaging-1.1.6.tar.gz tar zxvf Imaging-1.1.6.tar.gz cd Imaging-1.1.6 python setup.py build python setup.py install --prefix=~/opt/gaeenv
余談ですが、PILとlibjpegのバージョンの組み合わせを合わせておかないと、開発用サーバ起動時にワーニングがでてしまします。そのため、libjpegのバージョン6をインストールしました。
wget http://sourceforge.net/projects/libjpeg/files/libjpeg/6b/jpegsrc.v6b.tar.gz/download tar zxvf jpegsrc.v6b.tar.gz cd jpeg-6b ./configure --prefix=~/opt/gaeenv make make install
また、インストール先を~/opt/gaeenvとしたため、libディレクトリへのパスが追加されていません。そのため、setupenv.shにLD_LIBRARY_PATHを設定します。
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD/lib" echo "Updated LD_LIBRARY_PATH->$LD_LIBRARY_PATH"
Google App Engineでの開発用にPIL入れたけどWARNINGがでる
Google App Engineの開発環境を構築している最中で、ようやく開発サーバを起動できるようになったのでdev_appserver.pyでサーバを起動してみたところ、下の様なWARNINGが出てしまう。
WARNING 2010-12-23 02:46:55,402 dev_appserver.py:3698] Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: dlopen(opt/gaeenv/lib/python2.5/site-packages/PIL-1.1.7-py2.5-macosx-10.6-i386.egg/_imaging.so, 2): Symbol not found: _jpeg_resync_to_restart Referenced from: opt/gaeenv/lib/python2.5/site-packages/PIL-1.1.7-py2.5-macosx-10.6-i386.egg/_imaging.so Expected in: flat namespace in opt/gaeenv/lib/python2.5/site-packages/PIL-1.1.7-py2.5-macosx-10.6-i386.egg/_imaging.so
そこでググッてみたところ、"http://jetfar.com/libjpeg-and-python-imaging-pil-on-snow-leopard/"でそれらしいレスがあった。要するに、WARNINGの内容はバージョン違いが問題ってことを表している、とのこと。
で、ワーニングが出ていた組み合わせ、PILのバージョン1.1.7&libjpegのバージョン7を、PILのバージョン1.1.6&libjpegのバージョン6に変えました。すると、dev_appserver.pyの起動時にWARNINGがでなくなりました。確かgaeの環境はPIL1.1.6だったような気がするので、この辺りも関係していたのかもしれません。
よかったよかった。