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
これで今度こそ解決しました。