Python Image Library falha com a mensagem “decodificador JPEG não disponível” - PIL

305

O PIL suporta JPEG no meu sistema.

Sempre que faço um upload, meu código falha com:

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

Como posso resolver isto?

Ravi
fonte
22
É uma pergunta válida. PIL é uma famosa biblioteca Python e gera um erro estranho em alguns sistemas linux. Esta pergunta e a resposta apenas me ajudaram. É uma pergunta SO típica.
Nev
O PRAGMATIST e o TOC em mim dizem que pertencem ao ServerFault, não ao SO. Mas quantos programadores atingiram esse problema? Eu voto para passar a questão para ServerFault e deixar um redirecionamento no SO.
FlipMcF
1
Talvez você pode ler este e experimentá-lo: stackoverflow.com/questions/18504835/...
Wee
1
@dkt Estou usando travesseiro e estou aqui porque acabei de acertar esse problema.
Stephen Tetreault 22/02
1
@dkt Eu sei, eu estava apenas afirmando que o problema ainda persiste era tudo.
Stephen Tetreault 23/02

Respostas:

488

O libjpeg-dev é necessário para poder processar jpegs com travesseiro (ou PIL), portanto você precisa instalá-lo e recompilar o travesseiro. Parece também que o libjpeg8-dev é necessário no Ubuntu 14.04

Se você ainda estiver usando o PIL, deve realmente usar o travesseiro atualmente; portanto, pip uninstall PILantes de seguir estas instruções para trocar, ou se você tiver um bom motivo para permanecer com o PIL, substitua "travesseiro" por "PIL" abaixo )

No 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

Se isso não funcionar, tente uma das opções abaixo, dependendo de você estar no Ubuntu de 64 ou 32 bits.

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

Ou para o 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/

Em seguida, reinstale o travesseiro:

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

(Edita para incluir comentários dos comentários. Obrigado Charles Offenbacher por apontar que isso difere de 32 bits e o t-mart por sugerir o uso de --no-cache-dir).

Rolo
fonte
1
O problema era que eu tinha dois pacotes python. Um que é fornecido com o ubuntu e outro que pertence ao Zope Server. De alguma forma, a biblioteca foi corrompida porque eu a instalei incorretamente no pacote errado. Caso contrário, não há problema.
Ravi
2
Para o registro, que só funciona no x86_64, eu tive que executar: 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
Para quem está começando o PIL, observe que está desatualizado e não é mais mantido. Se você deseja trabalhar com imagens em seu projeto, use PILLOW, que é atualizado e mantido fork ou PIL.
Dhiraj Thakur
1
@Rolo após 3 hr sua segunda opção funcionou para mim, graças muito o travesseiro é idiota
Akshay Mukadam
5
As versões recentes do pip devem armazenar em cache os pacotes baixados e suas compilações. Certamente, foi muito demorado as pip installcoisas da primeira vez, mas as desinstalações e (re) instalações subseqüentes foram suspeitamente rápidas. De qualquer forma , os métodos acima não funcionaram para mim até eu executar pip install --no-cache-dir pillow. Boa sorte!
t-mart
63

Para aqueles no OSX, usei o seguinte binário para instalar o libpng e o libjpeg em todo o sistema:

libpng e libjpeg para OSX

Como eu já tinha o PIL instalado (via pip em um virtualenv), executei:

pip uninstall PIL
pip install PIL --upgrade

Isso resolveu o decoder JPEG not availableerro para mim.

ATUALIZAÇÃO (24/4/14) :

Versões mais recentes do pip requerem sinalizadores adicionais para baixar bibliotecas (incluindo PIL) de fontes externas. Tente o seguinte:

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

Consulte a seguinte resposta para obter informações adicionais: pip install PIL não instala no virtualenv

ATUALIZAÇÃO 2 :

Se no OSX Mavericks, defina a ARCHFLAGSsinalização como @RicardoGonzales nos comentários abaixo :

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install PIL --allow-external PIL --allow-unverified PIL
zeantsoi
fonte
Eu tive esse problema depois de atualizar para o Mavericks (10.9). A seguinte postagem do SO resolveu o problema para mim. Desça até a instalação de comando ferramentas de linha de comentário por @Formulka
tatlar
Se você está no Ubuntu 12.04 de 64 bits, tente a solução do zeantsoi, eu sei que ele fez isso para o OSX, mas eu tentei e funcionou para mim.
bloqueio
Eu tenho esse erro: Não foi possível encontrar nenhum donwnloads que satisfazem a pil exigência
RicardoGonzales
@RicardoGonzales, você provavelmente está executando uma versão do pip, o que requer que você passe sinalizadores adicionais. Por favor, veja a atualização para minha resposta.
precisa saber é o seguinte
O @zeantsoi agora está baixando o pacote e instalando, mas após a mensagem "Limpando". Eu recebi o erro refere-se a: "-c import setuptools, tokenize; __ file ... ..." algum conselho?
RicardoGonzales
29

Esta é a única maneira que funcionou para mim. Instalar pacotes e reinstalar o PIL não funcionou.

No ubuntu, instale o pacote necessário:

sudo apt-get install libjpeg-dev

(você também pode instalar libfreetype6 libfreetype6-dev zlib1g-devpara ativar outros decodificadores).

Em seguida, substitua PIL por travesseiro:

pip uninstall PIL
pip install pillow
Dennis Golomazov
fonte
Eu fiz isso há algum tempo e, de repente, o erro reapareceu hoje. Travesseiro atualização corrigiu o problema: pip install pillow --upgrade.
Dennis Golomazov 11/08/2015
21

Os trabalhos a seguir no 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

quando você vê "- suporte a JPEG disponível" significa que funciona.

Mas, se ainda não funcionar quando você editar sua imagem jpeg, verifique o caminho do python !! meu caminho python não foi encontrado /usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/, então edito o ~/.bashrccódigo a seguir:

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

então, finalmente, funciona !!

Jason Huang
fonte
oi, acho que estou tendo um problema com o caminho python não funcionando porque a instalação de estatísticas PIL com suporte ao --JPEG está disponível. no entanto, fazer pil op com imagens .jpeg causa erros de decodificador jpeg. stackoverflow.com/questions/18504835/…
Lucas Ou-Yang
16

No Fedora 17, tive que instalar libjpeg-devele depois reinstalar PIL:

sudo yum install --assumeyes libjpeg-devel
sudo pip-python install --upgrade PIL
Bengt
fonte
1
O mesmo vale para o RHEL / CentOS.
Jakub Roztocil 27/10
14

A resposta de Rolo é excelente, no entanto, tive que reinstalar o Pillow ignorando o cache do pip (introduzido no pip 7), caso contrário ele não será recompilado corretamente !!! O comando é:

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

e você pode ver se o Pillow foi configurado corretamente lendo nos logs isto:

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

como você pode ver, o suporte para jpg, tiff etc. está ativado, porque eu instalei anteriormente as bibliotecas necessárias via apt (libjpeg-dev libpng12-dev libfreetype6-dev libtiff-dev)

daveoncode
fonte
Obrigado por isso. A opção --no-cache-dir também me ajudou
dranxo
12

No Mac OS X Mavericks (10.9.3), resolvi isso fazendo o seguinte:

Instale o libjpeg pelo brew (sistema de gerenciamento de pacotes)

instalação do brew libjpeg

reinstalar travesseiro (eu uso travesseiro em vez de PIL)

pip instalar -I travesseiro

moogoo
fonte
2
Isso pode ser devido a um problema separado com a instalação do brew, mas era necessário brew unlink jpeg && brew link jpegantes da instalação do Pillow.
Lucas
11
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev

Instale-os e certifique-se de instalar o PIL com o pip, porque eu o compilei do código-fonte e, por algum motivo, não funcionou

EMP
fonte
Lista de todas as dependências necessárias .
Paolo
9

Eu já estava usando Pillowe recebi o mesmo erro. Tentei instalar libjpegou libjpeg-devconforme sugerido por outros, mas foi informado que uma versão (mais recente) já estava instalada.

No final, bastava reinstalar Pillow:

sudo pip uninstall Pillow
sudo pip install Pillow
Dimitris
fonte
3

Eu sou muito novato para comentar zeantsoi post; (. Então aqui está o que eu precisava fazer para resolver o OSX no 10.9.1)

IOError: jpeg do decodificador não disponível

1) instale as ferramentas do Xcode (abra seu terminal e execute:) xcode-select --install- retirado deste post: Não é possível instalar o PIL após o Mac OS X 10.9

2) instale o pacote libpng e libjpeg (instalador combinado) a partir deste link: http://ethan.tira-thompson.com/Mac_OS_X_Ports.html

3) reinicie (não tenho certeza se era obrigatório)

4) Reinstale o PIL com o run pip install -I PIL(como eu havia instalado o PIL antes de ter o problema)

Espero que esta ajuda e não confunda mais ...

_Oh o

Oh o
fonte
2

Esta pergunta foi publicada há um bom tempo e a maioria das respostas também é bastante antiga. Então, quando passei horas tentando descobrir isso, nada funcionou e tentei todas as sugestões deste post.

Eu ainda estava recebendo os erros JPEG padrão ao tentar fazer upload de um JPG no meu formulário de avatar do Django:

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

Depois verifiquei o repositório do Ubuntu 12.04 e notei alguns pacotes extras libjpeg. Eu instalei estes e meu problema foi resolvido:

sudo apt-get install libjpeg62 libjpeg62-dev

Instalando estas removido libjpeg-dev, libjpeg-turbo8-deve libjpeg8-dev.

Espero que isso ajude alguém no ano de 2015 e além!

Felicidades

nicorellius
fonte
1

Mesmo problema aqui, JPEG support availablemas ainda assim IOError: decoder/encoder jpeg not available, exceto que eu uso Pillow e não PIL.

Eu tentei todas as opções acima e muito mais, mas depois de muitas horas percebi que o uso sudo pip installnão funciona como eu esperava, em combinação com virtualenv. Parvo eu.

Usar sudoefetivamente inicia o comando em um novo shell (meu entendimento disso pode não estar totalmente correto) onde o virtualenv não está ativado, o que significa que os pacotes serão instalados no ambiente global. (Isso estragou tudo, acho que eu tinha 2 instalações diferentes do Pillow.)

Limpei as coisas, mudei de usuário para root e reinstalei no virtualenv e agora funciona.
Espero que isso ajude alguém!

kaka
fonte
1

Para o Fedora

Instale o pré-requisito
sudo dnf install make automake gcc gcc-c++ kernel-devel rpm-build libjpeg-devel zlib-devel python-devel
Agora instale o Pillow

sudo pip install pillow

Nota - Para libjpeg e zlib, estamos instalando os pacotes libjpeg-devel e zlib-devel no Fedora / CentOS / Red Hat

Ajinkya Bhosale
fonte
0

Primeiro, tive que excluir as pastas python na pasta oculta user / appData (que estava criando enormes dores de cabeça), além de desinstalar o Python. Em seguida, instalei o WinPython Distribution: http://code.google.com/p/winpython/, que inclui o PIL

Jill
fonte
4
O desenvolvimento de Python no Windows é doloroso. Eu aconselho a não.
eviltnan