IOError: декодер jpeg недоступен при использовании Pillow

Прежде чем кто-то скажет "sudo apt-get install libjpeg-dev" или что-то в этом роде, у меня нет доступа к sudo. Я нахожусь на части сервера, который НЕ позволяет мне иметь доступ к sudo. Так что я должен сделать все это в своем локальном каталоге. Только так я могу это сделать.

Мне нужен скрипт python для изменения размера изображения. Он прекрасно работает с файлами png, но не работает с файлами jpeg из-за ошибки, указанной в заголовке.

Вот шаги, которые я предпринял до сих пор:

  1. Скачал libjpeg-dev и установил на $HOME/jpegtest, поэтому внутри папки jpegtest/ находится lib/, include/ и т.д.
  2. Я скачал Pillow вручную и распаковал в $HOME/Pillow
  3. Я отредактировал поле setup.py, чтобы JPEG_ROOT стало libinclude(<absolute path to jpegtest>)
  4. Я построил и скомпилировал Pillow, где он был установлен в $HOME//.pythonbrew/pythons/Python-2.7.5/lib/python2.7/site-packages/Pillow-2.4.0-py2.7-linux-x86_64.egg. Важная часть вывода выглядит следующим образом:

    *** TKINTER support not available
    --- JPEG support available
    *** OPENJPEG (JPEG2000) support not available
    --- ZLIB (PNG/ZIP) support available
    *** LIBTIFF support not available
    *** FREETYPE2 support not available
    *** LITTLECMS2 support not available
    *** WEBP support not available
    *** WEBPMUX support not available
    

Поэтому я бы предположил, что это означает, что поддержка JPEG будет работать, но когда я запускаю свою программу, она говорит:

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

При вводе этого я также заметил вопрос в Pillow распознает кодировщик JPEG на установить, но не использовать, что звучало очень близко к моему, поэтому я попробовал решение:

ln -s /media/sdl1/home/midnight/jpegtest/lib/libjpeg.so /media/sdl1/home/midnight/.pythonbrew/pythons/Python-2.7.5/lib

Но у меня все еще та же ошибка.

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


person Thomas Riley    schedule 06.06.2014    source источник
comment
Возможно, попробуйте ldd, как в этом ответе stackoverflow.com/a/24397115/162768, и посмотрите, какой путь он ищет.   -  person Jason S    schedule 01.08.2014
comment
Похоже, вы должны попросить системного администратора установить нужные вам библиотеки в корень сервера.   -  person sundance    schedule 17.08.2014
comment
Вы уверены, что интерпретатор Python, который вы используете, взят из вашей установки Pythonbrew, а не из базовой ОС (в которой Pillow может быть скомпилирован без поддержки JPEG)?   -  person Timusan    schedule 18.08.2014


Ответы (1)


Вместо того, чтобы просто загружать нужные вам библиотеки, попробуйте создать целую среду Python локально в вашей домашней папке:

$ wget http://www.python.org/ftp/python/[desired version of Python].tgz
$ tar xzf Python[version].tgz
$ cd python-[version]
$ ./configure
$ make altinstall prefix=~ exec-prefix=~

Обновите переменную PATH, чтобы ваш локальный Python выполнялся первым:

$ PATH = /home/user/[pathtopython]:$PATH

Получите pip, из которого можно установить другие пакеты:

$ curl https://bootstrap.pypa.io/get-pip.py > get-pip.py
$ ./get-pip.py
$ pip install pillow

URL-адреса могут отличаться. Возможно, вам все же придется изменить setup.py — я не использовал эту технику с C-подобными библиотеками, поэтому я не уверен.

person A---    schedule 21.08.2014