Ubuntu 11.04 Natty で PIL をビルドする方法
原則として、PILはeasy_installやpipで問題が起こりやすいので、手動で python setup.py install を行う。*1
Ubuntu Natty では、 libjpeg や libpng をはじめ、多くのライブラリファイルが /usr/lib ではなくて /usr/lib/x86_64-linux-gnu *2に置かれている。
setup.py build は存在するライブラリを探して自動で JPEG や PNG のサポートの有効、無効を切り替えるのだが、このディレクトリを検索してくれないために、 libjpeg-dev をインストールしてあっても JPEG サポートがOFFになってしまう。
ライブラリの場所を指定するには、 setup.py を直接編集する。 setup.py の中の上の方に、次のような場所がある。
# -------------------------------------------------------------------- # Library pointers. # # Use None to look for the libraries in well-known library locations. # Use a string to specify a single directory, for both the library and # the include files. Use a tuple to specify separate directories: # (libpath, includepath). Examples: # # JPEG_ROOT = "/home/libraries/jpeg-6b" # TIFF_ROOT = "/opt/tiff/lib", "/opt/tiff/include" # # If you have "lib" and "include" directories under a common parent, # you can use the "libinclude" helper: # # TIFF_ROOT = libinclude("/opt/tiff") TCL_ROOT = None JPEG_ROOT = None ZLIB_ROOT = None TIFF_ROOT = None FREETYPE_ROOT = None LCMS_ROOT = None
ここで、ライブラリのパスを指定してやる。
# TIFF_ROOT = libinclude("/opt/tiff") TCL_ROOT = None JPEG_ROOT = '/usr/lib/x86_64-linux-gnu', '/usr/include' ZLIB_ROOT = JPEG_ROOT TIFF_ROOT = None FREETYPE_ROOT = JPEG_ROOT LCMS_ROOT = None
これで python setup.py build で JPEG や PNG のサポートが有効になった。
Nattyのライブラリパスの変更は、ソフトウェアを自分でビルドすることが多い人に取ってはかなり面倒な状況だ。今回は PIL を紹介したが、 Python 自体のビルドでも手動で設定しないといけない箇所が少しあった。
Python や PIL はまだ設定でなんとかなるからマシな方で、php では ROOT/lib, ROOT/include の ROOT を指定できるものの今回のように個別指定する方法が見当たらないので、configureのエラーを見ては該当するチェックをスルーするようにconfigureを修正するという泥臭い作業をしていた。