Biblioteka obrazów Python nie działa z komunikatem „dekoder JPEG niedostępny” - PIL

305

PIL obsługuje JPEG w moim systemie.

Za każdym razem, gdy przesyłam, mój kod nie działa z:

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

Jak mogę to rozwiązać?

Ravi
źródło
22
To ważne pytanie. PIL jest znaną biblioteką Python i daje dziwny błąd w niektórych systemach Linux. To pytanie i odpowiedź tylko mi pomogły. To typowe pytanie SO.
neves
PRAGMATIST i OCD we mnie mówią, że należy do ServerFault, a nie do SO. Ale ilu programistów dotknęło ten problem? Głosuję za przeniesieniem pytania do ServerFault i pozostawieniem przekierowania na SO.
FlipMcF
1
Może możesz to przeczytać i wypróbować: stackoverflow.com/questions/18504835/…
Wee
1
@dkt Używam poduszki i jestem tutaj, ponieważ właśnie trafiłem w ten problem.
Stephen Tetreault
1
@dkt Wiem, po prostu stwierdziłem, że problem nadal występuje.
Stephen Tetreault

Odpowiedzi:

488

libjpeg-dev jest wymagane, aby móc przetwarzać pliki JPEG z poduszką (lub PIL), więc musisz go zainstalować, a następnie ponownie skompilować poduszkę. Wydaje się również, że libjpeg8-dev jest potrzebny na Ubuntu 14.04

Jeśli nadal używasz PIL, powinieneś naprawdę używać poduszki dzisiaj, więc najpierw pip uninstall PILwykonaj te instrukcje, aby przełączyć się, lub jeśli masz dobry powód, aby trzymać się PIL, a następnie zamień „poduszkę” na „PIL” poniżej ).

W systemie 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

Jeśli to nie zadziała, wypróbuj jedną z poniższych opcji, w zależności od tego, czy korzystasz z 64-bitowego czy 32-bitowego systemu Ubuntu.

W systemie 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

Lub dla 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/

Następnie zainstaluj ponownie poduszkę:

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

(Zmiany uwzględniające informacje zwrotne z komentarzy. Podziękowania dla Charlesa Offenbachera za zwrócenie uwagi na to różni się w przypadku wersji 32-bitowej i t-mart za sugerowanie użycia --no-cache-dir).

Rolo
źródło
1
Problem polegał na tym, że miałem dwa pakiety Pythona. Jeden dostarczany z Ubuntu i drugi, który należał do Zope Server. Jakoś biblioteka została uszkodzona, ponieważ nieprawidłowo zainstalowałem ją w niewłaściwym pakiecie. W przeciwnym razie nie ma problemu.
Ravi
2
Dla przypomnienia, że ​​działa tylko na x86_64, musiałem uruchomić: 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
Każdy, kto dopiero zaczyna pracę z PIL, powinien zauważyć, że jest przestarzały i nie jest już tak naprawdę utrzymywany. Jeśli chcesz pracować z obrazami w swoim projekcie, użyj PILLOW, który jest aktualizowanym i obsługiwanym rozwidleniem lub PIL.
Dhiraj Thakur
1
@Rolo po 3 godz. Twoja druga opcja zadziałała dla mnie, dziękuję, poduszka jest głupia
Akshay Mukadam
5
Najnowsze wersje pip muszą buforować pobrane pakiety i ich kompilacje. Z pewnością pip installza pierwszym razem było to bardzo długie , ale późniejsze odinstalowania i (ponowne) instalacje były podejrzanie szybkie. W każdym razie powyższe metody nie działały dla mnie, dopóki nie uruchomiłem pip install --no-cache-dir pillow. Powodzenia!
t-mart
63

Dla tych na OSX, użyłem następującego pliku binarnego, aby uzyskać libpng i libjpeg zainstalowane w całym systemie:

libpng i libjpeg dla OSX

Ponieważ miałem już zainstalowany PIL (przez pip na virtualenv), uruchomiłem:

pip uninstall PIL
pip install PIL --upgrade

To rozwiązało decoder JPEG not availablebłąd dla mnie.

AKTUALIZACJA (24.04.14) :

Nowsze wersje pipa wymagają dodatkowych flag do pobierania bibliotek (w tym PIL) ze źródeł zewnętrznych. Spróbuj wykonać następujące czynności:

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

Aby uzyskać dodatkowe informacje, zobacz następującą odpowiedź: instalacja PIL PIL nie instaluj w virtualenv

AKTUALIZACJA 2 :

Jeśli na OSX Mavericks, będziesz chciał ustawić ARCHFLAGSflagę jako komentarz @RicardoGonzales poniżej :

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install PIL --allow-external PIL --allow-unverified PIL
zeantsoi
źródło
Miałem ten problem po aktualizacji do Mavericks (10.9). Poniższy post SO rozwiązał problem dla mnie. Przewiń w dół do komentarza narzędzia wiersza polecenia instalacji autorstwa @Formulka
tatlar
Jeśli korzystasz z systemu Ubuntu 12.04 64-bitowego, wypróbuj rozwiązanie Zeantsoi, wiem, że zrobił to dla OSX, ale spróbowałem i zadziałało dla mnie.
impas
Wystąpił ten błąd: Nie można znaleźć żadnych ładowań donwnload, które spełniają wymagania pil
RicardoGonzales 24.04.2014
@ RicardoGonzales, prawdopodobnie używasz wersji pipa, która wymaga przekazania dodatkowych flag. Proszę zobaczyć aktualizację mojej odpowiedzi.
zeantsoi
@zeantsoi pobiera teraz pakiet i instaluje, ale po komunikacie „Czyszczenie”. Mam błąd odnosi się do: „-c importuj setuptools, tokenize; __ plik ... ...” jakaś rada?
RicardoGonzales
29

To jedyny sposób, który działał dla mnie. Instalowanie pakietów i ponowna instalacja PIL nie działały.

Na Ubuntu zainstaluj wymagany pakiet:

sudo apt-get install libjpeg-dev

(możesz także zainstalować, libfreetype6 libfreetype6-dev zlib1g-devaby włączyć inne dekodery).

Następnie zamień PIL na poduszkę:

pip uninstall PIL
pip install pillow
Dennis Golomazov
źródło
Zrobiłem to jakiś czas temu i nagle błąd pojawił się dzisiaj. Aktualizacja poduszka rozwiązaniu problemu: pip install pillow --upgrade.
Dennis Golomazov,
21

Poniższe działa na 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

gdy zobaczysz „- Obsługa JPEG dostępna”, oznacza to, że działa.

Ale jeśli nadal nie działa, gdy edytujesz obraz JPEG, sprawdź ścieżkę do Pythona !! brakowało mojej ścieżki do Pythona /usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/, dlatego edytuję ~/.bashrcnastępujący kod do tego pliku:

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

w końcu to działa !!

Jason Huang
źródło
cześć, myślę, że mam problem ze ścieżką Pythona, która nie działa, ponieważ instaluję statystyki PIL, że - Obsługa JPEG JEST dostępna. jednak faktyczne wykonywanie operacji pil z obrazami .jpeg powoduje błędy jpeg dekodera. stackoverflow.com/questions/18504835/…
Lucas Ou-Yang,
16

Na Fedorze 17 musiałem zainstalować, libjpeg-devela następnie ponownie zainstalować PIL:

sudo yum install --assumeyes libjpeg-devel
sudo pip-python install --upgrade PIL
Bengt
źródło
1
To samo dotyczy RHEL / CentOS.
Jakub Roztocil
14

Odpowiedź Rolo jest doskonała, jednak musiałem ponownie zainstalować Pillow, omijając pamięć podręczną pip (wprowadzoną z pipem 7), w przeciwnym razie nie zostanie poprawnie skompilowana !!! Polecenie to:

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

i możesz zobaczyć, czy Poduszka została poprawnie skonfigurowana, czytając w dziennikach to:

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
    --------------------------------------------------------------------

jak widać obsługa jpg, tiff itd. jest włączona, ponieważ wcześniej zainstalowałem wymagane biblioteki przez apt (libjpeg-dev libpng12-dev libfreetype6-dev libtiff-dev)

daveoncode
źródło
Dzięki za to. Pomogła mi również opcja --no-cache-dir
dranxo,
12

W systemie Mac OS X Mavericks (10.9.3) rozwiązałem ten problem, wykonując następujące czynności:

Zainstaluj libjpeg by brew (system zarządzania pakietami)

brew zainstaluj libjpeg

zainstaluj ponownie poduszkę (używam poduszki zamiast PIL)

pip install -I poduszka

moogoo
źródło
2
Może to wynikać z osobnego problemu z instalacją naparu, ale musiałem to zrobić brew unlink jpeg && brew link jpegprzed zainstalowaniem poduszki.
Lucas
11
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev

Zainstaluj je i koniecznie zainstaluj PIL z pipem, ponieważ skompilowałem go ze źródła i z jakiegoś powodu nie działał

EMP
źródło
Lista wszystkich wymaganych zależności .
Paolo,
9

Już korzystałem Pillowi otrzymałem ten sam błąd. Próbowałem zainstalować libjpeglub libjpeg-devzgodnie z sugestią innych, ale powiedziano mi, że (nowsza) wersja została już zainstalowana.

Ostatecznie wystarczyło ponownie zainstalować Pillow:

sudo pip uninstall Pillow
sudo pip install Pillow
Dimitris
źródło
3

Jestem zbyt nowicjuszem, aby komentować post zeantsoi; (. Oto jego, co musiałem zrobić, aby rozwiązać na OSX 10.9.1

IOError: JPEG dekodera nie jest dostępny

1) zainstaluj narzędzia Xcode (otwórz terminal i uruchom:) xcode-select --install- zaczerpnięte z tego postu: Nie można zainstalować PIL po Mac OS X 10.9

2) zainstaluj pakiet libpng i libjpeg (instalator kombi) z tego linku: http://ethan.tira-thompson.com/Mac_OS_X_Ports.html

3) uruchom ponownie (nie jestem pewien, czy było to obowiązkowe)

4) Ponownie zainstaluj PIL z uruchomieniem pip install -I PIL(ponieważ wcześniej zainstalowałem PIL przed wystąpieniem problemu)

Mam nadzieję, że ta pomoc i nie mylić więcej ...

_oho

oho
źródło
2

To pytanie zostało opublikowane dość dawno temu, a większość odpowiedzi jest również dość stara. Więc kiedy spędziłem godziny próbując to rozgryźć, nic nie działało i wypróbowałem wszystkie sugestie w tym poście.

Podczas próby przesłania pliku JPG w postaci awatara Django wciąż pojawiały się standardowe błędy JPEG:

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

Następnie sprawdziłem repozytorium dla Ubuntu 12.04 i zauważyłem dodatkowe pakiety dla libjpeg. Zainstalowałem je i mój problem został rozwiązany:

sudo apt-get install libjpeg62 libjpeg62-dev

Instalacja nich usunięte libjpeg-dev, libjpeg-turbo8-devi libjpeg8-dev.

Mam nadzieję, że to pomoże komuś w roku 2015 i później!

Twoje zdrowie

nicorellius
źródło
1

Ten sam problem tutaj, JPEG support availableale nadal mam IOError: decoder/encoder jpeg not available, z wyjątkiem tego, że używam Pillow, a nie PIL.

Próbowałem wszystkich powyższych i więcej, ale po wielu godzinach zdałem sobie sprawę, że używanie sudo pip installnie działa zgodnie z oczekiwaniami, w połączeniu z virtualenv. Głupi ja.

Użycie sudoskutecznie uruchamia polecenie w nowej powłoce (moje rozumienie tego może nie być całkowicie poprawne), w którym virtualenv nie jest aktywowany, co oznacza, że ​​zamiast tego pakiety zostaną zainstalowane w środowisku globalnym. (To wszystko popsuło, myślę, że miałem 2 różne instalacje Pillow.)

Oczyściłem rzeczy, zmieniłem użytkownika na root i ponownie zainstalowałem w virtualenv, a teraz działa.
Mam nadzieję, że to komuś pomoże!

kaka
źródło
1

Dla Fedory

Zainstaluj wstępnie wymagane
sudo dnf install make automake gcc gcc-c++ kernel-devel rpm-build libjpeg-devel zlib-devel python-devel
Teraz zainstaluj Poduszkę

sudo pip install pillow

Uwaga - W przypadku libjpeg i zlib instalujemy pakiety libjpeg-devel i zlib-devel w Fedorze / CentOS / Red Hat

Ajinkya Bhosale
źródło
0

Najpierw musiałem usunąć foldery Pythona w ukrytym folderze user / appData (które powodowały ogromne problemy), oprócz odinstalowania Pythona. Następnie zainstalowałem WinPython Distribution: http://code.google.com/p/winpython/, który zawiera PIL

Jill
źródło
4
Tworzenie języka Python pod Windows jest bolesne. Radziłbym nie.
eviltnan