Django OS X Неправильная версия библиотеки JPEG: библиотеке 80, звонящий ожидает 62 sorl.thumbnail - PullRequest
3 голосов
/ 24 октября 2011

Я использую sorl.thumbnail для django локально на моем Mac и у меня были проблемы с PIL, но сегодня мне наконец удалось его установить - были некоторые проблемы с libjpeg.

Теперь я могу загружать и использовать изображения - но я не могу изменить их размер, используя sorl.thumbnail.

При попытке получить следующую ошибку:

Wrong JPEG library version: library is 80, caller expects 62

Кто-нибудьзнаю хорошее решение для этого.

Я не знаю, использует ли sorl более раннюю версию libjpeg или более влажную, есть какая-то призрачная установка чего-то, что осталось от всех моих попыток различными способами.

У меня есть:

  1. PIL 1.1.7
  2. libjpeg 8.

кто-нибудь знает подход?

Ответы [ 4 ]

7 голосов
/ 10 мая 2012

Для блага людей из будущего, которые сталкиваются с этой ошибкой и не знают почему, я хотел бы опубликовать свои выводы. Я надеюсь дать общее представление о том, что пошло не так, поскольку точные команды для его исправления могут отличаться на вашей машине, чем на моей установке OSX Lion.

Во-первых, поскольку легко потеряться в потенциальных решениях, важно понимать, что сообщение об ошибке корректно, когда в нем указано Wrong JPEG library version: library is 80, caller expects 62 или какая-либо другая комбинация 62, 70 и 80. Эти числа соответствуют различным несовместимым версиям libjpeg. Здесь есть две движущиеся части: динамически загружаемая библиотека jpeg и установка PIL (или Pillow). Сообщение об ошибке говорит о том, что ваша установка PIL была скомпилирована с заголовками из libjpeg версии 6.2, но когда она загружает реальную разделяемую библиотеку, она связывается с версией 8.0.

Исправление заключается в загрузке , сборке и установке требуемой версии libjpeg (подойдет любая, хотя более поздние версии будут проще собираться на OSX Lion):

 wget http://www.ijg.org/files/jpegsrc.v8d.tar.gz
 tar xzf jpegsrc*
 cd jpeg-*
 ./configure
 make
 sudo make install

Это должно оставить 2 файла заметки в / usr / local /. А именно /usr/local/lib/libjpeg.8.dylib и /usr/local/include/jpeglib.h. Теперь нам просто нужно заставить PIL (или Pillow) использовать эти два файла во время установки, и мы дома свободны. Я знаю, что есть лучший способ сделать это, но взлом (в соответствии с рекомендациями документов PIL) заключается в редактировании setup.py файла дистрибутива PIL перед его установкой. Вы можете обойтись, просто установив JPEG_ROOT = libinclude('/usr/local') в верхней части setup.py, хотя в других местах файла могут потребоваться дальнейшие манипуляции с каталогами.

Когда вы возитесь с путями, вы должны убедиться, что PIL полностью перестроил, прежде чем проверять, связан ли он с нужной библиотекой или нет. Я использовал команду типа rm -rf build && python setup.py install, чтобы убедиться, что библиотека всегда была свежо связана с текущим путем, который я тестировал.

Извините, это бессвязный ответ, но было очень обескураживающе попробовать все остальные варианты копирования и вставки, и ни один из них не сработал. Надеемся, что этот ответ удерживает, по крайней мере, несколько человек от потери многих часов в поисках упрощенного решения.

Удачи!

0 голосов
/ 22 июня 2019

Как и в предыдущем ответе, у меня была немного другая проблема, чем у ОП, но я хотел бы поделиться своим решением здесь, чтобы помочь кому-то в будущем.

Единственное, что мне помогло, - это заставить pip собрать подушку из исходного кода после установки dev версии необходимых библиотек (мой код редактировал jpg и добавлял метку с использованием пользовательского шрифта). Это было на встроенном устройстве на базе ARM, работающем под управлением Ubuntu Linux с использованием Python 3.7.3

apt-get install -y libjpeg-dev libfreetype6-dev
pip3 install pillow --global-option="build_ext" --global-option="--enable-jpeg" --global-option="--enable-freetype" 
0 голосов
/ 24 августа 2016

У меня была немного другая проблема, чем у ОП, но я хотел бы поделиться своим решением здесь, чтобы помочь кому-то в будущем.

ОС: OSX El Capitan Я установил libjpeg-turbo из скомпилированных двоичных файлов на их веб-сайте. Однако я не знал, что на моем Mac уже установлена ​​другая версия libjpeg. Я строил свой файл c, как это gcc myfile.c -o myfile.out -L /opt/libjpeg-turbo/lib -ljpeg. Это получило библиотеку из правильного местоположения, но компоновщик получал включенный заголовочный файл jpeglib.h из предустановленного местоположения. Я изменил мою команду сборки на это: gcc myfile.c -o myfile.out -I/opt/libjpeg-turbo/include/ -L /opt/libjpeg-turbo/lib -ljpeg, и это сработало. Нет больше библиотеки 80, звонящий ожидает 62!

0 голосов
/ 31 января 2012

Если у вас установлен macports, вы должны выполнить:

$ sudo port selfupdate
$ sudo port install py27-pil

Это проще, чем метод easy_install, поскольку macports устанавливает правильные зависимости.

...