Home / Blog Menu ↓

Installing PIL on Lion

Getting PIL working on Lion was a little more difficult than I thought it’d be. (I use PIL in Ink to resize images.) It appeared to install correctly, but when I tried to post something with an image, I got this:

ImportError: The _imaging C module is not installed

I followed the instructions at appelfreelance.com, but libjpeg wouldn’t compile, giving me this error:

checking build system type... mkdir: /private/tmp/PKInstallSandbox.vMj5ds/tmp: No such file or directory
mkdir: /private/tmp/PKInstallSandbox.vMj5ds/tmp: No such file or directory
config.guess: cannot create a temporary directory in /private/tmp/PKInstallSandbox.vMj5ds/tmp
configure: error: cannot guess build type; you must specify one

Turns out TotalTerminal had oddly set $TMPDIR to /private/tmp/PKInstallSandbox.vMj5ds/tmp, which obviously broke other things. I cleared it out (export TMPDIR=) and got libjpeg to compile.

But PIL still gave me this error when I tried to import _imaging in Python to test it:

ImportError: dlopen(/Library/Python/2.7/site-packages/PIL/_imaging.so, 2): Symbol not found: _jpeg_resync_to_restart
  Referenced from: /Library/Python/2.7/site-packages/PIL/_imaging.so
  Expected in: flat namespace

Oh joy. When I ran otool -L /Library/Python/2.7/site-packages/PIL/_imaging.so, libjpeg didn’t show up in the list, either. I recompiled and reinstalled libjpeg and PIL a few more times. No luck.

The final solution: I installed libjpeg via Homebrew (brew install libjpeg), then compiled and installed PIL (Imaging 1.1.7). That fixed the _imaging.so problem and PIL now works like a charm.