2012-02-10 10 views
10

Vedo questa domanda su Internet, e ho provato a seguirli tutti, ma non riesco ancora a far funzionare il PIL.Come installare PIL in Ubuntu 11.04?

Ho provato simbolicamente che collega lo zlib, jpeg, ecc librerie tramite:

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/ 

ho provato la modifica del file setup.py, aggiungendo questa linea:

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

Infatti, in esecuzione $ sudo python setup.py install mostra che Supporto JPEG, ZLIB/PNG, ecc. Disponibile. (Sto installarlo sia per il 2.5 e 2.7, funziona in nessuno dei due)

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 

Ma dopo tutto questo, ho ancora appare un errore decoder %s not available.

Sono alla fine del mio spirito. Qualcos'altro che potrei aver perso?

Ambiente personale: 64 bit Ubuntu 11.04 in esecuzione in una macchina virtuale VirtualBox.

Ecco quello che faccio per verificare se funziona 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

Perché non stai installando python-imaging con il gestore pacchetti? – mkriheli

+0

Non mi è venuto in mente. Inoltre, non conoscevo i nomi dei pacchetti. – john2x

risposta

12

Come sempre, usa il gestore di pacchetti:

sudo apt-get install python-imaging 

Sarà affrontare tutto per voi. Sono disponibili packages.

L'installazione manuale, in qualsiasi distribuzione Linux, è un'attività sprecata, a meno che i pacchetti non esistano realmente. I manutentori dei pacchetti passano del tempo assicurandosi che il pacchetto funzioni e si installi correttamente, non è inutile duplicare i loro sforzi. Soprattutto non installare manualmente qualcosa che poi non ha i vantaggi di un pacchetto - senza l'aggiornamento automatico, non facile rimozione, ecc ...

+0

Ho appena provato, ma ricevo comunque l'errore del decodificatore. Il mio giocherellona è andato in rovina in qualche modo? Ho già rimosso i file 'site-packages/PIL'. Inoltre, come installarlo per * entrambi * 2.5 e 2.7? (2.5 per Google App Engine) – john2x

+0

Quando ricevi questo errore? Non sembra un errore di importazione e, in caso contrario, il problema non è l'installazione, ma all'interno di PIL o le sue dipendenze. Potrebbe trattarsi di un bug nel pacchetto e, in tal caso, dovresti presentare una segnalazione di errore. Per quanto riguarda il 2.5, non sono sicuro di come Ubuntu gestisca le vecchie versioni del software, quindi temo di non poterlo rispondere. –

+0

Ho aggiornato il post originale per vedere come collaudo se funziona o meno. Fondamentalmente, apro un'immagine e la ruota. Ruotandolo usa il decoder, è lì che ottengo l'errore. – john2x

1

prova a reinstallare da zero:

  1. Cercare lib/pythonXX/site-packages/PIL. Cancella tutta questa directory insieme al file PIL.pth. Questo dovrebbe rimuovere completamente il pacchetto.

  2. Disimballare i file di installazione del PIL dal * tar.gz scaricato.

  3. Aggiungere le directory in cui si trova la libreria jpeg, con add_directory (...) come in precedenza. (Usa ldconfig -P | grep jpeg per trovare dove sono le librerie).

  4. Retry python setup.py build, quindi python setup.py install. Provalo.

mia esperienza è stata:

Non eseguire il punto 2 non ricostruire il pacchetto. La mancata esecuzione del passaggio 3 è stata la causa principale. La mancata esecuzione del passaggio 1 potrebbe aver riprodotto una parte.

Questo sembra essere un bug nell'installazione del PIL, non nella struttura del pacchetto di Ubuntu o di qualsiasi distro.

E solo per la cronaca: è abbastanza comune avere più di una versione Python installata su un sistema, il che rende necessario installare i pacchetti manualmente. Alcune persone hanno un 2.x con 3.x per gli esperimenti, gli hosting condivisi hanno 2.5 e le applicazioni hanno bisogno di 2.7, solo per fare due esempi.

2

Ho reinstallato con successo PIL in Ubuntu 12.04 come questo:

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 

Non aumentare il IOError: decoder zip not available più dopo la reinstallazione del PIL. Il mio errore è stato traceback:

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

ho trovato che sia una combinazione dei due di cui sopra quando si installa con un requirements.txt su Ubuntu. Sto usando Vagrant per eseguire uno script chef, e trovato che questo approccio funziona meglio per me:

In primo luogo, io uso uno script bash per impostare 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/ 

successivo, durante la requirements.txt installazione , la parte superiore del file si presenta come:

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

Django==1.5.4 
PIL==1.1.7 
... 

Naturalmente, questo è un modo non garantito di farlo, ma funziona per dev e veloce costruisce. Per la produzione, è meglio scaricare e verificare manualmente tutti i pacchetti e installarli da un repository gestito locale.