Die Python-Bildbibliothek schlägt mit der Meldung "Decoder JPEG nicht verfügbar" - PIL fehl

305

PIL unterstützt JPEG in meinem System.

Bei jedem Upload schlägt mein Code fehl mit:

File "PIL/Image.py", line 375, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available

Wie kann ich das beheben?

Ravi
quelle
22
Es ist eine gültige Frage. PIL ist eine berühmte Python-Bibliothek und gibt in einigen Linux-Systemen einen seltsamen Fehler. Diese Frage und die Antwort haben mir nur geholfen. Es ist eine typische SO-Frage.
Neves
Der PRAGMATIST und die OCD in mir sagen, dass sie zu ServerFault gehören, nicht zu SO. Aber wie viele Programmierer haben dieses Problem getroffen? Ich stimme dafür, die Frage nach ServerFault zu verschieben und eine Weiterleitung auf SO zu belassen.
FlipMcF
1
Vielleicht können Sie dies lesen und versuchen: stackoverflow.com/questions/18504835/…
Wee
1
@dkt Ich benutze Kissen und bin hier, weil ich gerade dieses Problem getroffen habe.
Stephen Tetreault
1
@dkt Ich weiß, ich habe nur gesagt, dass das Problem immer noch besteht, war alles.
Stephen Tetreault

Antworten:

488

libjpeg-dev ist erforderlich, um JPEGs mit Pillow (oder PIL) verarbeiten zu können. Sie müssen es also installieren und das Pillow neu kompilieren. Es scheint auch, dass libjpeg8-dev unter Ubuntu 14.04 benötigt wird

Wenn Sie immer noch PIL verwenden, sollten Sie heutzutage wirklich Kissen verwenden. pip uninstall PILBevor Sie diese Anweisungen befolgen, um zu wechseln, oder wenn Sie einen guten Grund haben, bei PIL zu bleiben, ersetzen Sie "Kissen" durch "PIL" im Folgenden ).

Unter Ubuntu:

# install libjpeg-dev with apt
sudo apt-get install libjpeg-dev
# if you're on Ubuntu 14.04, also install this
sudo apt-get install libjpeg8-dev

# reinstall pillow
pip install --no-cache-dir -I pillow

Wenn dies nicht funktioniert, versuchen Sie eine der folgenden Möglichkeiten, je nachdem, ob Sie 64-Bit- oder 32-Bit-Ubuntu verwenden.

Für Ubuntu x64:

sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib
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

Oder für Ubuntu 32bit:

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

Installieren Sie dann das Kissen neu:

pip install --no-cache-dir -I pillow

(Änderungen, um Feedback von Kommentaren aufzunehmen. Vielen Dank an Charles Offenbacher, der darauf hingewiesen hat, dass dies für 32-Bit-Versionen unterschiedlich ist, und an T-Mart, der die Verwendung von vorgeschlagen hat. --no-cache-dir)

Rolo
quelle
1
Das Problem war, dass ich zwei Python-Pakete hatte. Eine, die mit Ubuntu geliefert wird, und eine andere, die zu Zope Server gehört. Irgendwie war die Bibliothek beschädigt, weil ich sie falsch im falschen Paket installiert hatte. Ansonsten gibt es kein Problem.
Ravi
2
Für den Datensatz, der nur auf x86_64 funktioniert, musste ich Folgendes ausführen: sudo ln -s /usr/lib/i386-linux-gnu/libz.so / usr / lib /; sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so.6 / usr / lib /; sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so / usr / lib /
Charles Offenbacher
2
Wer gerade mit PIL anfängt, sollte beachten, dass dies veraltet ist und nicht mehr wirklich gewartet wird. Wenn Sie mit Bildern in Ihrem Projekt arbeiten möchten, verwenden Sie PILLOW, das aktualisiert und gewartet wird.
Dhiraj Thakur
1
@ Rolo nach 3 Stunden Ihre zweite Option hat für mich funktioniert, danke, das Kissen ist dumm
Akshay Mukadam
5
Neuere Versionen von pip müssen heruntergeladene Pakete und deren Kompilierungen zwischenspeichern. Sicherlich war es pip installbeim ersten Mal sehr langwierig , aber nachfolgende Deinstallationen und (Neu-) Installationen waren verdächtig schnell. Wie auch immer , die oben genannten Methoden haben bei mir erst funktioniert, als ich gelaufen bin pip install --no-cache-dir pillow. Viel Glück!
T-Mart
63

Für diejenigen unter OSX habe ich die folgende Binärdatei verwendet, um libpng und libjpeg systemweit zu installieren:

libpng & libjpeg für OSX

Da ich PIL bereits installiert hatte (über pip auf einer virtuellen Umgebung), lief ich:

pip uninstall PIL
pip install PIL --upgrade

Dies hat den decoder JPEG not availableFehler für mich behoben .

UPDATE (24.04.14) :

Neuere Versionen von pip erfordern zusätzliche Flags, um Bibliotheken (einschließlich PIL) von externen Quellen herunterzuladen. Versuche Folgendes:

pip install PIL --allow-external PIL --allow-unverified PIL

Weitere Informationen finden Sie in der folgenden Antwort: pip install PIL wird nicht in virtualenv installiert

UPDATE 2 :

Unter OSX Mavericks möchten Sie das ARCHFLAGSFlag als @ RicardoGonzales-Kommentar unten setzen :

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install PIL --allow-external PIL --allow-unverified PIL
zeantsoi
quelle
Ich hatte dieses Problem nach dem Upgrade auf Mavericks (10.9). Der folgende SO-Beitrag hat das Problem für mich gelöst. Scrollen Sie nach unten zum Kommentar der Installationsbefehlszeilentools von @Formulka
tatlar
Wenn Sie mit Ubuntu 12.04 64-Bit arbeiten, probieren Sie die Lösung von zeantsoi aus. Ich weiß, dass er es für OSX getan hat, aber ich habe es versucht und es hat bei mir funktioniert.
Deadlock
Ich habe diesen Fehler erhalten: Es konnten keine Donwnloads gefunden werden, die die Anforderung erfüllen pil
RicardoGonzales
@ RicardoGonzales, Sie verwenden wahrscheinlich eine Version von pip, für die Sie zusätzliche Flags übergeben müssen. Bitte beachten Sie das Update zu meiner Antwort.
Zeantsoi
@zeantsoi lädt jetzt das Paket herunter und installiert es aber nach der Meldung "Aufräumen". Ich habe den Fehler erhalten, bezieht sich auf: "-c import setuptools, tokenize; __ file ... ..." Irgendwelche Ratschläge?
RicardoGonzales
29

Dies ist der einzige Weg, der für mich funktioniert hat. Das Installieren von Paketen und das Neuinstallieren von PIL hat nicht funktioniert.

Installieren Sie auf Ubuntu das erforderliche Paket:

sudo apt-get install libjpeg-dev

(Möglicherweise möchten Sie auch installieren libfreetype6 libfreetype6-dev zlib1g-dev, um andere Decoder zu aktivieren.)

Dann ersetzen Sie PIL durch Kissen:

pip uninstall PIL
pip install pillow
Dennis Golomazov
quelle
Ich habe das vor einiger Zeit gemacht und plötzlich ist der Fehler heute wieder aufgetreten. Das Aufrüsten des Kissens hat das Problem behoben : pip install pillow --upgrade.
Dennis Golomazov
21

Die folgenden Arbeiten unter Ubuntu 12.04:

pip uninstall PIL
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev
pip install PIL --upgrade

Wenn Sie "- JPEG-Unterstützung verfügbar" sehen, bedeutet dies, dass es funktioniert.

Aber wenn es beim Bearbeiten Ihres JPEG-Bildes immer noch nicht funktioniert, überprüfen Sie den Python-Pfad !! Mein Python-Pfad ist fehlgeschlagen /usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/, daher bearbeite ich ~/.bashrcden folgenden Code zu dieser Datei hinzufügen:

Bearbeiten: export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/

dann endlich klappt es !!

Jason Huang
quelle
Hallo, ich glaube, ich habe ein Problem mit dem Python-Pfad, der nicht funktioniert, weil die Installation von PIL-Statistiken, die - JPEG-Unterstützung bieten, verfügbar ist. Das tatsächliche Ausführen von Pil-Optionen mit JPEG-Bildern führt jedoch zu JPEG-Decoderfehlern. stackoverflow.com/questions/18504835/…
Lucas Ou-Yang
16

Auf Fedora 17 musste ich installieren libjpeg-develund anschließend neu installieren PIL:

sudo yum install --assumeyes libjpeg-devel
sudo pip-python install --upgrade PIL
Bengt
quelle
1
Gleiches gilt für RHEL / CentOS.
Jakub Roztocil
14

Rolos Antwort ist ausgezeichnet, aber ich musste Pillow neu installieren, indem ich den Pip-Cache (eingeführt mit Pip 7) umging, sonst wird es nicht richtig neu kompiliert !!! Der Befehl lautet:

pip install -I --no-cache-dir -v Pillow

und Sie können sehen, ob Pillow richtig konfiguriert wurde, indem Sie in den Protokollen Folgendes lesen:

PIL SETUP SUMMARY
    --------------------------------------------------------------------
    version      Pillow 2.8.2
    platform     linux 3.4.3 (default, May 25 2015, 15:44:26)
                 [GCC 4.8.2]
    --------------------------------------------------------------------
    *** TKINTER support not available
    --- JPEG support available
    *** OPENJPEG (JPEG2000) support not available
    --- ZLIB (PNG/ZIP) support available
    --- LIBTIFF support available
    --- FREETYPE2 support available
    *** LITTLECMS2 support not available
    *** WEBP support not available
    *** WEBPMUX support not available
    --------------------------------------------------------------------

Wie Sie sehen, ist die Unterstützung für JPG, TIFF usw. aktiviert, da ich zuvor die erforderlichen Bibliotheken über apt installiert habe (libjpeg-dev libpng12-dev libfreetype6-dev libtiff-dev).

Daveoncode
quelle
Danke dafür. Die Option --no-cache-dir hat mir auch geholfen
dranxo
12

Unter Mac OS X Mavericks (10.9.3) habe ich dies folgendermaßen gelöst:

Installieren Sie libjpeg by Brew (Paketverwaltungssystem)

Brew install libjpeg

Kissen neu installieren (ich verwende Kissen anstelle von PIL)

Pip installieren -I Kissen

Moogoo
quelle
2
Dies könnte auf ein separates Problem bei der Installation von Brew zurückzuführen sein, musste dies jedoch brew unlink jpeg && brew link jpegvor der Installation von Pillow tun.
Lucas
11
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev

Installieren Sie diese und stellen Sie sicher, dass Sie PIL mit pip installieren, da ich es aus dem Quellcode kompiliert habe und es aus irgendeinem Grund nicht funktioniert hat

EMP
quelle
Liste aller erforderlichen Abhängigkeiten .
Paolo
9

Ich habe bereits verwendet Pillowund habe den gleichen Fehler erhalten. Versucht zu installieren libjpegoder libjpeg-devwie von anderen vorgeschlagen, aber es wurde mitgeteilt, dass bereits eine (neuere) Version installiert wurde.

Am Ende war nur eine Neuinstallation erforderlich Pillow:

sudo pip uninstall Pillow
sudo pip install Pillow
Dimitris
quelle
3

Ich bin zu neu, um einen Beitrag von zeantsoi zu kommentieren

IOError: Decoder-JPEG nicht verfügbar

1) Installieren Sie die Xcode-Tools (öffnen Sie Ihr Terminal und führen Sie :) aus xcode-select --install- entnommen aus diesem Beitrag: PIL kann nach Mac OS X 10.9 nicht installiert werden

2) Installieren Sie das libpng- und libjpeg-Paket (Combo-Installationsprogramm) über diesen Link: http://ethan.tira-thompson.com/Mac_OS_X_Ports.html

3) Neustart (nicht sicher, ob es obligatorisch war)

4) Installieren Sie PIL mit run neu pip install -I PIL(da ich PIL vor dem Problem ursprünglich installiert hatte).

Hoffe diese Hilfe und verwirre nicht mehr ...

_oho

oho
quelle
2

Diese Frage wurde vor einiger Zeit gestellt und die meisten Antworten sind auch ziemlich alt. Als ich stundenlang versuchte, dies herauszufinden, funktionierte nichts und ich versuchte alle Vorschläge in diesem Beitrag.

Beim Versuch, ein JPG in mein Django-Avatar-Formular hochzuladen, wurden immer noch die Standard-JPEG-Fehler angezeigt:

raise IOError("decoder %s not available" % decoder_name)
OSError: decoder jpeg not available

Dann überprüfte ich das Repository für Ubuntu 12.04 und bemerkte einige zusätzliche Pakete für libjpeg. Ich habe diese installiert und mein Problem wurde gelöst:

sudo apt-get install libjpeg62 libjpeg62-dev

Die Installation dieser entfernt libjpeg-dev, libjpeg-turbo8-devund libjpeg8-dev.

Hoffe das hilft jemandem im Jahr 2015 und darüber hinaus!

Prost

Nicorellius
quelle
1

Das gleiche Problem hier, JPEG support availableaber immer noch IOError: decoder/encoder jpeg not available, außer ich benutze Pillow und nicht PIL.

Ich habe all das und noch mehr ausprobiert, aber nach vielen Stunden wurde mir klar, dass die Verwendung sudo pip installin Kombination mit nicht wie erwartet funktioniertvirtualenv . Wie dumm von mir.

Durch die sudoeffektive Verwendung wird der Befehl in einer neuen Shell gestartet (nach meinem Verständnis ist dies möglicherweise nicht ganz korrekt), in der die virtuelle Umgebung nicht aktiviert ist. Dies bedeutet, dass die Pakete stattdessen in der globalen Umgebung installiert werden. (Das hat alles durcheinander gebracht, ich glaube ich hatte 2 verschiedene Installationen von Pillow.)

Ich habe die Dinge aufgeräumt, den Benutzer in root geändert und in der virtuellen Umgebung neu installiert, und jetzt funktioniert es.
Hoffentlich hilft das jemandem!

Kaka
quelle
1

Für Fedora

Voraussetzung
sudo dnf install make automake gcc gcc-c++ kernel-devel rpm-build libjpeg-devel zlib-devel python-devel
installieren Installieren Sie jetzt Pillow

sudo pip install pillow

Hinweis - Für libjpeg und zlib installieren wir die Pakete libjpeg-devel und zlib-devel in Fedora / CentOS / Red Hat

Ajinkya Bhosale
quelle
0

Zuerst musste ich die Python-Ordner im versteckten Ordner user / appData löschen (was große Kopfschmerzen verursachte) und Python deinstallieren. Dann habe ich WinPython Distribution installiert: http://code.google.com/p/winpython/, das PIL enthält

Jill
quelle
4
Die Python-Entwicklung unter Windows ist schmerzhaft. Ich würde davon abraten.
Eviltnan