2012-02-10 14 views
10

Veo esta pregunta en todo Internet, y traté de seguirlas todas, pero todavía no puedo hacer que PIL funcione.¿Cómo instalar PIL en Ubuntu 11.04?

He intentado simbólicamente une el zlib, JPEG, etc a través de las bibliotecas:

sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/ 
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/ 
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/ 

traté de editar el archivo setup.py, añadiendo esta línea:

add_directory(library_dirs, "/usr/lib/x86_64-linux-gnu") 

De hecho, se ejecutan programas que $ sudo python setup.py install El soporte JPEG, ZLIB/PNG, etc. está disponible. (Estoy instalarlo tanto para 2.5 y 2.7, funciona en ninguno)

sudo python2.5 setup.py install 
running install 
running build 
running build_py 
running build_ext 
-------------------------------------------------------------------- 
PIL 1.1.7 SETUP SUMMARY 
-------------------------------------------------------------------- 
version  1.1.7 
platform  linux2 2.5.6 (r256:88840, Feb 1 2012, 15:55:08) 
       [GCC 4.5.2] 
-------------------------------------------------------------------- 
*** TKINTER support not available 
--- JPEG support available 
--- ZLIB (PNG/ZIP) support available 
--- FREETYPE2 support available 
--- LITTLECMS support available 

Pero después de todo eso, todavía consigo un error decoder %s not available.

Estoy en mi ingenio final. ¿Algo más que podría haber perdido?

Mi entorno: Ubuntu 11.04 de 64 bits que se ejecuta en una máquina virtual de VirtualBox.

Aquí es lo que hago para probar si funciona o no PIL

$ python 
>>> from PIL import Image 
>>> im = Image.open("photo.jpg") 
>>> im.rotate(45) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1359, in rotate 
    self.load() 
File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 189, in load 
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig) 
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 385, in _getdecoder 
    raise IOError("decoder %s not available" % decoder_name) 
IOError: decoder zip not available 
>>> 
+0

¿Por qué no está instalando python-imageing con el administrador de paquetes? – mkriheli

+0

No se me pasó por la cabeza. Además, no sabía los nombres de los paquetes. – john2x

Respuesta

12

Como siempre, utilice el gestor de paquetes:

sudo apt-get install python-imaging 

Se va a tratar con todo para usted. El packages está disponible.

La instalación manual, en cualquier distribución de Linux, es un esfuerzo desperdiciado, a menos que los paquetes realmente no existan. Los mantenedores de paquetes pasan tiempo asegurando que el paquete funciona y se instala correctamente, no tiene sentido duplicar su esfuerzo. Especialmente no instalar manualmente algo que luego no tenga las ventajas de un paquete - sin la actualización automática, sin el retiro fácil, etc ...

+0

Acabo de probarlo, pero todavía obtengo el error del decodificador. ¿De alguna manera mi juguete lo estropeó? Ya eliminé los archivos 'site-packages/PIL'. Además, ¿cómo se instala para * both * 2.5 y 2.7? (2.5 para Google App Engine) – john2x

+0

¿Cuándo recibe este error? No parece un error de importación, y si no lo es, su problema no es la instalación, sino dentro de PIL o sus dependencias. Esto puede ser un error con el paquete, y si es así, debe presentar un informe de error. En cuanto a 2.5, no estoy seguro de cómo Ubuntu maneja las versiones antiguas de software, así que me temo que no puedo responder esa. –

+0

Actualicé la publicación original para ver cómo pruebo si funciona o no. Básicamente, abro una imagen y la giro. Girando usa el decodificador, de ahí me sale el error. – john2x

1

intente volver a instalar desde cero:

  1. Busque lib/pythonXX/site-packages/PIL. Elimine todo este directorio junto con el archivo PIL.pth. Esto debería eliminar completamente el paquete.

  2. Desempaquete los archivos de instalación de PIL del * tar.gz que descargó.

  3. Agregue los directorios donde está su biblioteca jpeg, con add_directory (...) como lo hizo anteriormente. (Utilice ldconfig -P | grep jpeg para encontrar dónde están las bibliotecas).

  4. Reintenta la creación de python setup.py, luego la instalación de python setup.py. Pruébalo.

Mi experiencia fue:

No realizar el paso 2 no reconstruir el paquete. No realizar el paso 3 fue la causa raíz. No realizar el paso 1 puede haber jugado un papel.

Esto parece ser un error en la instalación de PIL, no en la estructura del paquete de Ubuntu o de cualquier distribución.

Y solo para el registro: es bastante común tener más de una versión de Python instalada en un sistema, lo que hace que sea necesario instalar paquetes manualmente. Algunas personas tienen un 2.x con un 3.x para experimentar, las hostings compartidas tienen 2.5 y las aplicaciones necesitan un 2.7, solo para dar dos ejemplos.

2

He reinstalado con éxito PIL en Ubuntu 12.04 como esto:

pip uninstall PIL 
apt-get install libjpeg8 libjpeg62-dev libfreetype6 libfreetype6-dev 
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/ 
ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/ 
ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/ 
pip install -U PIL 

No aumenta la IOError: decoder zip not available más después de volver a instalar el PIL. Mi error de seguimiento fue:

Traceback (most recent call last): 
    File "convert_image.py", line 15, in <module> 
    image.save('output.png') 
    File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1406, in save 
    self.load() 
    File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 189, in load 
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig) 
    File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 385, in _getdecoder 
    raise IOError("decoder %s not available" % decoder_name) 
IOError: decoder zip not available 
0

Encontré que es una combinación de los dos anteriores al instalar con un requirements.txt en Ubuntu. Estoy usando Vagrant para ejecutar un script cocinero, y se encontró que este enfoque funciona mejor para mí:

En primer lugar, yo uso un script bash para configurar PIL:

#!/usr/bin/env bash 

sudo apt-get build-dep python-imaging 
sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/ 
sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/ 
sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/ 

A continuación, durante la instalación requirements.txt , la parte superior del archivo será similar a:

--allow-external PIL 
--allow-unverified PIL 

Django==1.5.4 
PIL==1.1.7 
... 

por supuesto, esta es una manera segura de hacerlo, pero funciona para dev y construye rápida. Para la producción, es mejor descargar y verificar todos los paquetes de forma manual e instalarlos desde un repositorio administrado local.