Django OS X Неверная версия библиотеки JPEG: библиотека 80, вызывающий объект ожидает 62 sorl.thumbnail

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

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

Когда я пытаюсь, я получаю следующую ошибку:

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

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

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

У меня есть :

  1. 1.1.7
  2. libjpeg 8.

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


person niklasdstrom    schedule 24.10.2011    source источник


Ответы (4)


В интересах людей из будущего, которые сталкиваются с этой ошибкой и не знают, почему, я хотел бы опубликовать свои выводы. Я надеюсь дать общее представление о том, что пошло не так, поскольку точные команды для исправления могут отличаться на вашем компьютере от моей установки 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, чтобы убедиться, что библиотека всегда свежесвязана с текущим путем, который я тестировал.

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

Удачи!

person Community    schedule 10.05.2012

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

$ sudo port selfupdate
$ sudo port install py27-pil

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

person Maxime    schedule 31.01.2012
comment
Спасибо за ответ - у меня все получилось - понятия не имею, что я сделал, но теперь это работает ... вроде. И хотя я хотел бы отметить это как хороший ответ, я не собираюсь пробовать его, рискуя испортить мою идеальную установку - еще раз спасибо! - может кому поможет - person niklasdstrom; 01.02.2012

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

ОС: 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!

person Sid    schedule 24.08.2016

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

Единственное, что сработало для меня, это заставить 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" 
person David Grob    schedule 22.06.2019