Instalar PIL en un virtualenv de python, y que importe correctamente las librerías de jpeg, png, etc.

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 apt-get install libjpeg62 libjpeg62-dev
$ sudo apt-get install zlib1g-dev
$ sudo apt-get 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:

    1. 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)
    2. 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.
    3. 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/
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: