PIL(3)

2007年3月1日のエントリで書いたPILのデコードエラーの件。原因がわかりました。
現象は、画像を変換しようとするとこんな感じでエラーがでる。

Traceback (most recent call last):
  File "/usr/local/zope/cms/Products/Archetypes/Field.py", line 2228, in createScales
    imgdata, format = self.scale(data, w, h)
  File "/usr/local/zope/cms/Products/Archetypes/Field.py", line 2272, in scale
    image.thumbnail(size, self.pil_resize_algo)
  File "/usr/local/lib/python2.4/site-packages/PIL/Image.py", line 1522, in thumbnail
    self.load()
  File "/usr/local/lib/python2.4/site-packages/PIL/ImageFile.py", line 180, in load
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
  File "/usr/local/lib/python2.4/site-packages/PIL/Image.py", line 375, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available

原因はやはりPIL。pythonのモジュールをインストールすると、buildディレクトリができます。Imagin1.1.6の場合こんな感じ。

$ ls
BUILDME         PIL             _imaging.c      display.c       path.c
CHANGES         PIL.pth         _imagingft.c    doctest.py      selftest.py
CONTENTS        README          _imagingmath.c  encode.c        setup.py
Docs            Sane            _imagingtk.c    libImaging
Images          Scripts         build           map.c
MANIFEST        Tk              decode.c        outline.c

5行目にありますね。一度python setup.py buildを実行するとできます。この下でライブラリなんかがビルドされるようです。この件のように、必要なライブラリがない状態で一度ビルドした場合、makeとは違ってすでにコンパイルされたライブラリなどは再コンパイルされないみたい。
従って、このbuildディレクトリを削除してから再度コンパイルリンクすればいい。

$ rm build
$ python setup.py build
# python setup.py install

これで今度こそ解決しました。