Збій бібліотеки зображень 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. Це питання і відповідь просто допомогли мені. Це типове питання SO.
neves

PRAGMATIST і OCD в мені кажуть, що вони належать ServerFault, а не SO. Але скільки програмістів зачепило цю проблему? Я голосую, щоб перенести питання на ServerFault і залишити переадресацію на місці SO.
FlipMcF

1
Можливо, ви можете прочитати це і спробувати: stackoverflow.com/questions/18504835/…
вихід

1
@dkt Я використовую подушку і тут, тому що я просто потрапив у цю проблему.
Стівен Тетро

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

Відповіді:


488

libjpeg-dev потрібен, щоб мати можливість обробляти jpegs подушкою (або 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, який оновлюється та підтримується виделкою або PIL.
Dhiraj Thakur

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 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). Наступна публікація ТА вирішила проблему для мене. Прокрутіть униз до коментаря до інструментів встановлення командного рядка коментар @Formulka
tatlar

Якщо ви перебуваєте на Ubuntu 12.04 64 біт, спробуйте рішення zeantsoi, я знаю, що він це зробив для OSX, але я спробував це, і він працював на мене.
тупик

Я отримав цю помилку: не вдалося знайти завантажених завантажень, які задовольняли б вимогам
RicardoGonzales

@RicardoGonzales, ви, ймовірно, працюєте на версії pip, що вимагає пройти додаткові прапори. Будь ласка, дивіться оновлення моєї відповіді.
zeantsoi

@zeantsoi зараз завантажує пакет і встановлює, але після повідомлення "Очищення". Я отримав помилку, стосується: "-c імпорту setuptools, tokenize; __ файл ... ..." будь-яку пораду?
RicardoGonzales

29

Це єдиний спосіб, який працював на мене. Установка пакетів та перевстановлення PIL не працювали.

На ubuntu встановіть необхідний пакет:

sudo apt-get install libjpeg-dev

(ви також можете встановити, libfreetype6 libfreetype6-dev zlib1g-devщоб включити інші декодери).

Потім замініть PIL подушкою:

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 !! мій шлях пітона пропустив /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. однак, фактично виконання опцій pil із зображеннями .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 7), інакше вона не буде належним чином перекомпільована !!! Команда така:

pip install -I --no-cache-dir -v 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
dranxo

12

У Mac OS X Mavericks (10.9.3) я вирішив це, зробивши наступне:

Встановіть libjpeg за допомогою пива (система управління пакетами)

варити встановити libjpeg

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

піп установка -я подушка


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 перед проблемою)

Сподіваюся, що це допоможе і не плутайте більше ...

_охо


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
Розвиток пітона під вікнами болючий. Я б радив не робити.
eviltnan

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.