Сбой библиотеки изображений Python с сообщением «декодер JPEG недоступен» - PIL


305

PIL поддерживает JPEG в моей системе.

Всякий раз, когда я делаю загрузку, мой код не работает с:

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

Как я могу решить это?


22
Это правильный вопрос. PIL - это знаменитая библиотека Python, и она дает странную ошибку в некоторых системах Linux. Этот вопрос и ответ только помогли мне. Это типичный вопрос ТАК.
Невес

PRAGMATIST и OCD во мне говорят, что это относится к ServerFault, а не к SO. Но сколько программистов столкнулись с этой проблемой? Я голосую, чтобы перенести вопрос в ServerFault и оставить переадресацию на SO.
FlipMcF

1
Может быть, вы можете прочитать это и попробовать это: stackoverflow.com/questions/18504835/…
Wee

1
@dkt Я использую подушку и нахожусь здесь, потому что я только что затронул эту проблему.
Стивен Тетро

1
@dkt Я знаю, я только что заявил, что проблема все еще остается.
Стивен Тетро

Ответы:


488

libjpeg-dev требуется, чтобы иметь возможность обрабатывать JPEG с подушкой (или PIL), поэтому вам нужно установить его и затем перекомпилировать подушку. Также кажется, что libjpeg8-dev необходим в Ubuntu 14.04

Если вы все еще используете PIL, тогда вам действительно следует использовать подушку в эти дни, поэтому сначала, pip uninstall PILпрежде чем следовать этим инструкциям для переключения, или, если у вас есть веские причины придерживаться PIL, замените «подушку» на «PIL» в приведенном ниже примере. ).

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

Если это не сработает, попробуйте выполнить одно из следующих действий, в зависимости от того, используете ли вы 64-битную или 32-битную Ubuntu.

Для 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

Или для 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/

Затем переустановите подушку:

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

(Изменения включают обратную связь с комментариями. Спасибо Чарльзу Оффенбахеру за то, что он указал, что это отличается для 32-битной версии, и t-mart за предложение использования --no-cache-dir).


1
Проблема была в том, что у меня было два пакета Python. Один, который поставляется с Ubuntu, а другой, принадлежащий Zope Server. Каким-то образом библиотека была повреждена, потому что я неправильно установил ее в неправильный пакет. Иначе проблем нет.
Рави

2
Для записи, которая работает только на x86_64, мне пришлось запустить: 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 /
Чарльз Оффенбахер

2
Для тех, кто только начинает с PIL, следует помнить, что он устарел и больше не поддерживается. Если вы хотите работать с изображениями в вашем проекте, используйте PILLOW, который обновляется и поддерживает fork или PIL.
Дирадж Тхакур

1
@Rolo через 3 часа, твой второй вариант сработал для меня, спасибо, что подушка тупица
Акшай Мукадам

5
Последние версии pip должны кэшировать загруженные пакеты и их компиляции. Конечно, это было очень долго pip install, но затем последующие удаления и (повторные) установки были подозрительно быстрыми. Во всяком случае , методы, описанные выше, не работали для меня, пока я не побежал pip install --no-cache-dir pillow. Удачи!
T-Mart

63

Для тех, кто работает в OSX, я использовал следующий двоичный файл для установки libpng и libjpeg по всей системе:

libpng & libjpeg для OSX

Поскольку у меня уже был установлен PIL (через pip на virtualenv), я запустил:

pip uninstall PIL
pip install PIL --upgrade

Это решило decoder JPEG not availableошибку для меня.

ОБНОВЛЕНИЕ (24.04.14) :

Более новые версии pip требуют дополнительных флагов для загрузки библиотек (включая PIL) из внешних источников. Попробуйте следующее:

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

Дополнительную информацию смотрите в следующем ответе: pip install PIL не устанавливается в virtualenv

ОБНОВЛЕНИЕ 2 :

Если в OSX Mavericks вы захотите установить ARCHFLAGSфлаг как комментарии @RicardoGonzales ниже :

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install PIL --allow-external PIL --allow-unverified PIL

У меня была эта проблема после обновления до Mavericks (10.9). Следующий пост SO решил проблему для меня. Прокрутите вниз, чтобы установить комментарий инструментов командной строки @Formulka
tatlar

Если вы работаете в Ubuntu 12.04 64 bit, попробуйте решение Zeantsoi, я знаю, что он сделал это для OSX, но я попробовал это, и это сработало для меня.
тупик

Я получил эту ошибку: Не удалось найти никаких загрузок, которые удовлетворяют требованию pil
RicardoGonzales

@RicardoGonzales, вы, вероятно, работаете с версией pip, требующей от вас дополнительных флагов. Пожалуйста, смотрите обновление к моему ответу.
Zeantsoi

@zeantsoi теперь загружает пакет и устанавливает его, но после сообщения «Очистка». Я получил сообщение об ошибке: «-c import setuptools, tokenize; __ file ... ...» любой совет?
Рикардо Гонсалес

29

Это единственный способ, который работал для меня. Установка пакетов и переустановка PIL не работали.

В Ubuntu установите необходимый пакет:

sudo apt-get install libjpeg-dev

(Вы также можете установить, libfreetype6 libfreetype6-dev zlib1g-devчтобы включить другие декодеры).

Затем замените ПИЛ на подушку:

pip uninstall PIL
pip install pillow

Я сделал это некоторое время назад, и вдруг ошибка снова появилась сегодня. Обновление подушки решило проблему pip install pillow --upgrade.
Денис Голомазов

21

Следующие работы на 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

когда вы видите «- Доступна поддержка JPEG», это означает, что это работает.

Но, если это все еще не работает, когда вы редактируете изображение в формате JPEG, проверьте путь к Python! мой путь к Python пропущен /usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/, поэтому я редактирую и ~/.bashrcдобавляю следующий код в этот файл:

Редактировать: export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/

тогда, наконец, это работает !!


Привет, я думаю, что у меня проблема с путём Python, не работающим, потому что установка статистики PIL, что поддержка --JPEG доступна. однако, на самом деле выполнение опций с изображениями .jpeg приводит к ошибкам jpeg декодера. stackoverflow.com/questions/18504835/…
Лукас Оу-Ян

16

На Fedora 17 мне пришлось установить libjpeg-develи затем переустановить PIL:

sudo yum install --assumeyes libjpeg-devel
sudo pip-python install --upgrade PIL

1
То же самое касается RHEL / CentOS.
Якуб Розтоцил

14

Ответ Роло превосходен, однако мне пришлось переустанавливать Pillow, обходя кэш pip (представлен в pip 7), иначе он не будет перекомпилирован должным образом !!! Команда:

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

и вы можете увидеть, правильно ли настроена Pillow, прочитав в журналах следующее:

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

как вы можете видеть, поддержка jpg, tiff и т. д. включена, потому что ранее я устанавливал необходимые библиотеки через apt (libjpeg-dev libpng12-dev libfreetype6-dev libtiff-dev)


Спасибо за это. Опция --no-cache-dir мне тоже
помогла

12

В Mac OS X Mavericks (10.9.3) я решил эту проблему следующим образом:

Установите libjpeg от brew (система управления пакетами)

brew установить libjpeg

переустановите подушку (я использую подушку вместо PIL)

pip install -I подушка


2
Это может быть связано с отдельной проблемой с моей установкой варева, но мне пришлось это сделать brew unlink jpeg && brew link jpegперед установкой подушки.
Лукас

11
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev

Установите их и обязательно установите PIL с pip, потому что я скомпилировал его из исходного кода и по какой-то причине он не работал


Список всех необходимых зависимостей .
Паоло

9

Я уже использовал Pillowи получил ту же ошибку. Попытка установки libjpegили libjpeg-devкак предложено другими, но было сказано, что (более новая) версия уже установлена.

В конце концов все, что нужно было переустановить Pillow:

sudo pip uninstall Pillow
sudo pip install Pillow

3

Я слишком новичок, чтобы комментировать Zeantsoi сообщение; (. Так вот его, что мне нужно было сделать, чтобы решить на OSX на 10.9.1

IOError: декодер JPEG недоступен

1) установить инструменты Xcode (откройте ваш терминал и выполните:) xcode-select --install- взято из этого поста: не удается установить PIL после Mac OS X 10.9

2) установить пакет libpng и libjpeg (установщик комбо) по этой ссылке: http://ethan.tira-thompson.com/Mac_OS_X_Ports.html

3) перезагрузка (не уверен, что это было обязательно)

4) Переустановите PIL с запуском pip install -I PIL(как я изначально установил PIL до возникновения проблемы)

Надеюсь, что это поможет и не путайте больше ...

_oho


2

Этот вопрос был опубликован довольно давно, и большинство ответов тоже довольно старые. Поэтому, когда я часами пытался это выяснить, ничего не получалось, и я попробовал все предложения в этом посте.

Я все еще получал стандартные ошибки JPEG при попытке загрузить JPG в форме аватара Django:

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

Затем я проверил репозиторий для Ubuntu 12.04 и заметил несколько дополнительных пакетов для libjpeg. Я установил их, и моя проблема была решена:

sudo apt-get install libjpeg62 libjpeg62-dev

Установка этих удалены libjpeg-dev, libjpeg-turbo8-devи libjpeg8-dev.

Надеюсь, что это поможет кому-то в 2015 году и далее!

ура


1

Та же проблема здесь, JPEG support availableно все же есть IOError: decoder/encoder jpeg not available, за исключением того, что я использую подушку, а не PIL.

Я попробовал все вышеперечисленное и многое другое, но через много часов я понял, что использование sudo pip installне работает, как я ожидал, в сочетании с virtualenv. Я такой глупый.

Использование sudoэффективно запускает команду в новой оболочке (мое понимание этого может быть не совсем правильным), где virtualenv не активирован, что означает, что пакеты будут установлены в глобальной среде. (Это запутало вещи, я думаю, что у меня было 2 разные установки подушки.)

Я все почистил, поменял пользователя на root и переустановил в virtualenv и теперь все работает.
Надеюсь, это кому-нибудь поможет!


1

Для Fedora

Установите предварительные условия
sudo dnf install make automake gcc gcc-c++ kernel-devel rpm-build libjpeg-devel zlib-devel python-devel
Теперь установите подушку

sudo pip install pillow

Примечание. Для libjpeg и zlib мы устанавливаем пакеты libjpeg-devel и zlib-devel в Fedora / CentOS / Red Hat


0

Сначала мне пришлось удалить папки python в скрытой папке user / appData (которая создавала огромные головные боли), в дополнение к удалению Python. Затем я установил дистрибутив WinPython: http://code.google.com/p/winpython/, который включает в себя PIL


4
Разработка Python под Windows является болезненной. Я бы посоветовал не делать этого.
eviltnan

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.