Pustaka Gambar Python gagal dengan pesan "decoder JPEG not available" - PIL

305

PIL mendukung JPEG di sistem saya.

Setiap kali saya melakukan unggahan, kode saya gagal dengan:

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

Bagaimana saya bisa menyelesaikan ini?

Ravi
sumber
22
Itu adalah pertanyaan yang valid. PIL adalah Python Library yang terkenal dan memberikan kesalahan aneh di beberapa sistem linux. Pertanyaan dan jawaban ini hanya membantu saya. Ini adalah pertanyaan SO yang khas.
neves
PRAGMATIST dan OCD di dalam saya mengatakan itu milik ServerFault, bukan SO. Tetapi berapa banyak programmer yang mengalami masalah ini? Saya memilih untuk memindahkan pertanyaan ke ServerFault, dan meninggalkan pengalihan di SO.
FlipMcF
1
Mungkin Anda dapat membaca ini dan mencobanya: stackoverflow.com/questions/18504835/…
Wee
1
@ Gdk Saya menggunakan bantal dan saya di sini karena saya baru saja menyelesaikan masalah ini.
Stephen Tetreault
1
@ Gdk Saya tahu, saya hanya menyatakan bahwa masalahnya masih ada.
Stephen Tetreault

Jawaban:

488

libjpeg-dev diperlukan untuk dapat memproses jpeg dengan bantal (atau PIL), jadi Anda harus menginstalnya dan kemudian mengkompilasi ulang bantal. Tampaknya juga libjpeg8-dev diperlukan di Ubuntu 14.04

Jika Anda masih menggunakan PIL maka Anda harus benar-benar menggunakan bantal hari ini, jadi pertama-tama pip uninstall PILsebelum mengikuti instruksi ini untuk beralih, atau jika Anda memiliki alasan yang baik untuk bertahan dengan PIL maka ganti "bantal" dengan "PIL" di bawah ini. ).

Di 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

Jika itu tidak berhasil, coba salah satu di bawah ini, tergantung apakah Anda menggunakan Ubuntu 64bit atau 32bit.

Untuk 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

Atau untuk 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/

Kemudian pasang kembali bantal:

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

(Suntingan untuk memasukkan umpan balik dari komentar. Terima kasih Charles Offenbacher untuk menunjukkan ini berbeda untuk 32bit, dan t-mart untuk menyarankan penggunaan --no-cache-dir).

Rolo
sumber
1
Masalahnya adalah saya punya dua paket python. Satu yang dikirimkan bersama dengan ubuntu dan lainnya milik Zope Server. Entah bagaimana, perpustakaan rusak karena saya salah menginstalnya dalam paket yang salah. Kalau tidak, tidak ada masalah.
Ravi
2
Sebagai catatan, itu hanya bekerja pada x86_64, saya harus menjalankan: 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
Bagi siapa pun yang baru memulai dengan PIL harus mencatat bahwa sudah usang dan tidak benar-benar dipertahankan lagi. Jika Anda ingin bekerja dengan gambar dalam proyek Anda, gunakan BANTAL yang diperbarui dan dipelihara garpu atau PIL.
Dhiraj Thakur
1
@Rolo setelah 3 jam opsi kedua Anda bekerja untuk saya, terima kasih banyak, bantal itu bodoh
Akshay Mukadam
5
Versi pip terbaru harus men-cache paket yang diunduh dan kompilasinya. Tentu saja, itu adalah hal yang sangat panjang untuk pip installpertama kalinya, tetapi kemudian membatalkan pencopotan berikutnya dan menginstal ulang dengan cepat mencurigakan. Bagaimanapun , metode di atas tidak bekerja untuk saya sampai saya berlari pip install --no-cache-dir pillow. Semoga berhasil!
t-mart
63

Bagi mereka yang menggunakan OSX, saya menggunakan biner berikut ini untuk menginstal libpng dan libjpeg di seluruh sistem:

libpng & libjpeg untuk OSX

Karena saya sudah menginstal PIL (via pip pada virtualenv), saya menjalankan:

pip uninstall PIL
pip install PIL --upgrade

Ini menyelesaikan decoder JPEG not availablekesalahan untuk saya.

UPDATE (4/24/14) :

Versi pip yang lebih baru membutuhkan tanda tambahan untuk mengunduh pustaka (termasuk PIL) dari sumber eksternal. Coba yang berikut ini:

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

Lihat jawaban berikut untuk info tambahan: pip install PIL jangan instal ke virtualenv

PEMBARUAN 2 :

Jika pada OSX Mavericks, Anda ingin mengatur ARCHFLAGSbendera sebagai komentar @RicardoGonzales di bawah ini :

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install PIL --allow-external PIL --allow-unverified PIL
zeantsoi
sumber
Saya mengalami masalah ini setelah memutakhirkan ke Mavericks (10.9). Posting SO berikut memecahkan masalah bagi saya. Gulir ke bawah ke instal tool command line yang dikomentari oleh @Fululka
tatlar
Jika Anda menggunakan Ubuntu 12.04 64 bit, coba solusi zeantsoi, saya tahu dia melakukannya untuk OSX tetapi saya mencobanya dan itu berhasil untuk saya.
kebuntuan
Saya mendapat kesalahan ini: Tidak dapat menemukan donwnloads yang memenuhi persyaratan pil
RicardoGonzales
@ RicardoGonzales, Anda mungkin menjalankan versi pip yang mengharuskan Anda untuk melewati flag tambahan. Silakan lihat pembaruan untuk jawaban saya.
zeantsoi
@zeantsoi sekarang mengunduh paket dan menginstal tetapi setelah pesan "Pembersihan". Saya mendapat kesalahan mengacu pada: "-c import setuptools, tokenize; __ file ... ..." ada saran?
RicardoGonzales
29

Ini satu-satunya cara yang bekerja untuk saya. Menginstal paket dan menginstal ulang PIL tidak berhasil.

Di ubuntu, instal paket yang diperlukan:

sudo apt-get install libjpeg-dev

(Anda mungkin juga ingin menginstal libfreetype6 libfreetype6-dev zlib1g-devuntuk mengaktifkan decoder lainnya).

Kemudian ganti PIL dengan bantal:

pip uninstall PIL
pip install pillow
Dennis Golomazov
sumber
Saya melakukan ini beberapa waktu yang lalu, dan tiba-tiba kesalahan muncul kembali hari ini. Upgrade bantal tetap masalah: pip install pillow --upgrade.
Dennis Golomazov
21

Pekerjaan berikut di 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

ketika Anda melihat "- dukungan JPEG tersedia" itu berarti berfungsi.

Tetapi, jika masih tidak berfungsi saat Anda mengedit gambar jpeg Anda, periksa jalur python !! jalur python saya tidak terjawab /usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/, jadi saya edit ~/.bashrctambahkan kode berikut ke file ini:

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

lalu, akhirnya, itu berhasil !!

Jason Huang
sumber
hai, saya pikir saya mengalami masalah dengan jalur python tidak berfungsi karena menginstal statistik PIL yang - dukungan JPEG tersedia. Namun, sebenarnya melakukan pil opt dengan gambar .jpeg menyebabkan kesalahan decoder jpeg. stackoverflow.com/questions/18504835/…
Lucas Ou-Yang
16

Pada Fedora 17 saya harus menginstal libjpeg-develdan menginstal ulang PIL:

sudo yum install --assumeyes libjpeg-devel
sudo pip-python install --upgrade PIL
Bengt
sumber
1
Hal yang sama berlaku untuk RHEL / CentOS.
Jakub Roztocil
14

Jawaban Rolo sangat bagus, namun saya harus menginstal ulang Pillow dengan mem-bypass cache pip (diperkenalkan dengan pip 7) jika tidak, ia tidak akan dikompilasi ulang dengan benar !!! Perintahnya adalah:

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

dan Anda dapat melihat apakah Bantal telah dikonfigurasi dengan benar dengan membaca di log ini:

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

seperti yang Anda lihat dukungan untuk jpg, tiff dan sebagainya diaktifkan, karena saya sebelumnya menginstal pustaka yang diperlukan melalui apt (libjpeg-dev libpng12-dev libfreetype6-dev libtiff-dev)

daveoncode
sumber
Terima kasih untuk ini. Opsi --no-cache-dir membantu saya juga
dranxo
12

Di Mac OS X Mavericks (10.9.3), saya menyelesaikan ini dengan melakukan hal berikut:

Instal libjpeg by brew (sistem manajemen paket)

buat instalasi libjpeg

pasang kembali bantal (saya menggunakan bantal bukan PIL)

install pip -Saya bantal

moogoo
sumber
2
Ini mungkin karena masalah terpisah dengan pemasangan minuman saya, tetapi saya harus brew unlink jpeg && brew link jpegsebelum memasang Bantal.
Lucas
11
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev

Instal ini dan pastikan untuk menginstal PIL dengan pip karena saya mengkompilasinya dari sumber dan untuk beberapa alasan itu tidak berfungsi

EMP
sumber
Daftar semua dependensi yang diperlukan .
Paolo
9

Saya sudah menggunakan Pillowdan mendapat kesalahan yang sama. Sudah mencoba menginstal libjpegatau libjpeg-devseperti yang disarankan oleh orang lain tetapi diberitahu bahwa versi (yang lebih baru) sudah diinstal.

Pada akhirnya yang diperlukan hanyalah menginstal ulang Pillow:

sudo pip uninstall Pillow
sudo pip install Pillow
Dimitris
sumber
3

Saya terlalu pemula untuk berkomentar zeantsoi posting; (. Jadi di sini apa yang harus saya lakukan untuk diselesaikan pada OSX pada 10.9.1 yang

IOError: decoder jpeg tidak tersedia

1) instal alat Xcode (buka terminal Anda dan jalankan:) xcode-select --install- diambil dari posting ini: Tidak dapat menginstal PIL setelah Mac OS X 10.9

2) instal paket libpng dan libjpeg (installer kombo) dari tautan ini: http://ethan.tira-thompson.com/Mac_OS_X_Ports.html

3) reboot (tidak yakin itu wajib)

4) Instal ulang PIL dengan run pip install -I PIL(karena saya telah menginstal PIL sebelum mengalami masalah)

Semoga ini bisa membantu dan jangan bingung lagi ...

_oho

oho
sumber
2

Pertanyaan ini diposting beberapa waktu yang lalu dan sebagian besar jawabannya sudah cukup tua. Jadi ketika saya menghabiskan waktu berjam-jam untuk mencari tahu ini, tidak ada yang berhasil, dan saya mencoba semua saran di posting ini.

Saya masih mendapatkan kesalahan JPEG standar ketika mencoba mengunggah JPG dalam bentuk avatar Django saya:

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

Kemudian saya memeriksa repositori untuk Ubuntu 12.04 dan melihat beberapa paket tambahan libjpeg. Saya menginstal ini dan masalah saya terpecahkan:

sudo apt-get install libjpeg62 libjpeg62-dev

Instalasi ini dihapus libjpeg-dev, libjpeg-turbo8-devdan libjpeg8-dev.

Semoga ini bisa membantu seseorang di tahun 2015 dan selanjutnya!

Bersulang

nicorellius
sumber
1

Masalah yang sama di sini, JPEG support availabletetapi masih ada IOError: decoder/encoder jpeg not available, kecuali saya menggunakan Bantal dan bukan PIL.

Saya mencoba semua hal di atas dan banyak lagi, tetapi setelah berjam - jam saya menyadari bahwa menggunakan sudo pip installtidak berfungsi seperti yang saya harapkan, dikombinasikan dengan virtualenv. Saya konyol.

Menggunakan sudosecara efektif meluncurkan perintah dalam shell baru (pemahaman saya tentang hal ini mungkin tidak sepenuhnya benar) di mana virtualenv tidak diaktifkan, yang berarti bahwa paket akan diinstal di lingkungan global sebagai gantinya. (Ini mengacaukan segalanya, saya pikir saya memiliki 2 instalasi Bantal yang berbeda.)

Saya membersihkan semuanya, mengubah pengguna menjadi root dan menginstal ulang di virtualenv dan sekarang berfungsi.
Semoga ini bisa membantu seseorang!

kaka
sumber
1

Untuk Fedora

Instal prasyarat
sudo dnf install make automake gcc gcc-c++ kernel-devel rpm-build libjpeg-devel zlib-devel python-devel
Sekarang instal Bantal

sudo pip install pillow

Catatan - Untuk libjpeg dan zlib kami menginstal paket libjpeg-devel dan zlib-devel di Fedora / CentOS / Red Hat

Ajinkya Bhosale
sumber
0

Pertama saya harus menghapus folder python di folder tersembunyi user / appData (yang membuat sakit kepala besar), selain menguninstall Python. Kemudian saya menginstal Distribusi WinPython: http://code.google.com/p/winpython/ yang mencakup PIL

Jill
sumber
4
Pengembangan python di bawah windows itu menyakitkan. Saya menyarankan untuk tidak melakukannya.
eviltnan