Instalar PIL en un virtualenv de python, y que importe correctamente las librerías de jpeg, png, etc.
febrero 16, 2012 Deja un comentario
PIL es una librería bastante útil en muchos casos. Se apoya en varias librerías externas para manejar diferentes formatos de imagen:
- libjpeg para manejar imágenes JPEG (en Ubuntu 11.04 aptitude install libjpeg62 libjpeg62-dev).
- zlib para manejar imágenes PNG (en Ubuntu 11.04 aptitude install zlib1g zlib1g-dev).
- etc.
La manera más lógica de instalarlo debería ser instalar primero esas dependencias en el sistema, como explica aquí: http://www.eddiewelker.com/2010/03/31/installing-pil-virtualenv-ubuntu/, y luego instalar PIL con “pip install PIL”. Es necesario instalar la versión “-dev” para que incluya las cabeceras C. En una distribución tipo Debian sería:
$ sudo aptitude install libjpeg62 libjpeg62-dev $ sudo aptitude install zlib1g-dev $ sudo aptitude install libfreetype6 libfreetype6-dev
El problema es que el instalador tiene un algoritmo bastante cutre para localizar estas librerías en el sistema, y a menudo no las encuentra. Por ejemplo en Arch las encuentra bien, pero en Ubuntu no. Mi problema ahora mismo es instalarlo dentro de un virtualenv con pip install. El comando pip se descarga correctamente la librería y la compila bien, pero al no encontrar esas dependencias, me sale el siguiente mensaje:
-------------------------------------------------------------------- *** TKINTER support not available *** JPEG support not available *** ZLIB (PNG/ZIP) support not available *** FREETYPE2 support not available *** LITTLECMS support not available --------------------------------------------------------------------
He visto tres soluciones, de más complicada a menos:
- Descargar PIL de http://effbot.org/downloads/Imaging-1.1.7.tar.gz e instalarlo manualmente con python setup.py install. Si sigue sin encontrar las librerías, trucar el setup como se explica aquí: http://effbot.org/zone/pil-decoder-jpeg-not-available.htm.(esta no la recomiendo normalmente)
- Instalar PIL con pip pero diciéndole que no lo compile, y luego editar el setup y compilarlo a mano, tal como explica aquí: http://ubuntuforums.org/showpost.php?p=10804763&postcount=2.(esta es la más recomendable)
1/ Find the path where libjpeg.so is installed, with dpkg -L libjpeg62 dpkg -L zlib1g dpkg -L libfreetype6 2/ Call 'pip install -I pil --no-install' to download and unpack the PIL source into your build directory; 3/ Get into your build directory (<virtualenv_path>/build/pil) and edit setup.py; 4/ Find a line that says 'add_directory(library_dirs, "/usr/lib")' (line 214 here) 5/ Add the line 'add_directory(library_dirs, "<library_path>")' afterwards; 6/ Call 'pip install -I pil --no-download' to finish the installation. - Instalar PIL globalmente en el sistema con aptitude install python-imaging (al ser un paquete de Ubuntu ya sí que resuelve todas las dependencias) y luego copiarlo o enlazarlo al virtualenv, como explica éste: http://menudoproblema.es/blog/entries/2011/04/26/soporte-para-jpeg-zlib-y-freetype2-en-pil/.(esta es una opción rápida si no funciona la anterior)
$ cd /path/to/virtualenv $ ln -s /usr/lib/python2.7/dist-packages/PIL/ lib/python2.7/site-packages/