Compilar PIL en CentOS 6.5 64bit y no morir en el intento

Recientemente tuve la necesidad de instalar PIL para resolver las dependecias en una aplicación desarrollada en Django por lo que debí descargar las fuentes desde su sitio web, pero antes tenia que satisfacer las dependencias de PIL en un entorno virtual (virtualenv) corriendo CentOS 6.5 - 64bit, para ello fue necesario instalar los siguientes paquetes:

# yum install freetype freetype-devel zlib zlib-devel libpng libpng-devel libjpeg libjpeg-devel libtiff libtiff-devel lcms-devel -y

Adicional instalaremos:

yum install libtiff.i686 libtiff-devel.i686 zlib.i686 zlib-devel.i686 -y

Muchos de las librerias se instalaran en /usr/lib64 por lo que deberemos realizar unos enlaces simbolicos de las siguientes librerias al directorio /usr/lib:

# ln -s /usr/lib64/libfreetype.so /usr/lib/
# ln -s /usr/lib64/liblcms.so /usr/lib/

Resolver el problema IOError: decoder jpeg not available

En algunos casos y luego de instalar PIL recibiran el error IOError: decoder jpeg not available ,  la solución para mi fue instalar los paquetes de i686 en nuestro CentOS 6.5 de 64bit:

# yum install libpng.i686 libpng-devel.i686 libjpeg-turbo.i686 libjpeg-turbo-devel.i686 -y

Si ya se cuenta con una instalación PIL es recomendable borrarla y volver a instalar.

Instaladas las dependencias anteriores de los repositorios de CentOS 6. Descargamos, desempaquteamos nuestro Imaging-1.1.7.tar.gz e instalamos:

# wget -c http://effbot.org/downloads/Imaging-1.1.7.tar.gz
# tar xzf Imaging-1.1.7.tar.gz
# cd Imaging-1.1.7
# python setup.py build_ext -i

Si todo ha ido bien, luego recibiremos el siguiente mensaje:

--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.7.3 (default, Mar  8 2013, 10:11:21)
              [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)]
--------------------------------------------------------------------
*** TKINTER support not available (Tcl/Tk 8.5 libraries needed)
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.

Notese que se tiene soporte para libjpeg, freetype, littlecms y zlib, por lo que procederemos a instalar PIL y posterior a ello realizaremos un test con el archivo selftest.py:

# python setup.py install
# python selftest.py

Se deberá recibir un mensaje del test con lo siguiente:

--------------------------------------------------------------------
PIL 1.1.7 TEST SUMMARY 
--------------------------------------------------------------------
Python modules loaded from ./PIL
Binary modules loaded from ./PIL
--------------------------------------------------------------------
--- PIL CORE support ok
*** TKINTER support not installed
--- JPEG support ok
--- ZLIB (PNG/ZIP) support ok
--- FREETYPE2 support ok
--- LITTLECMS support ok
--------------------------------------------------------------------
Running selftest:
--- 57 tests passed.

Recuerden que la instalación la he realizado en un entorno virtual al que he llamado venv-django en donde PIL quedo instalado bajo la ruta y con el archivo:

/home/zokeber/venv-django/lib/python2.7/site-packages/PIL
/home/zokeber/venv-django/lib/python2.7/site-packages/PIL.pth

Para comprobar si se tiene instalado PIL-1.1.7 correctamente podemos consultar con pip:

# pip list
PIL (1.1.7)
wsgiref (0.1.2)

Es de comentar que me he topado con el desarrollo de PIL 1.2 en Bitbucket.org pero al parecer permenece congelado por el autor de esta libreria, aunque ya existe un fork de la versión actualizada el 27 de Enero de 2012.