Как установить PIL в Ubuntu 11.04? - PullRequest
10 голосов
/ 10 февраля 2012

Я вижу этот вопрос, заданный по всему Интернету, и я пытался проследить за ними, но я все еще не могу заставить PIL работать.

Я попытался символически связать библиотеки zlib, jpeg и т. Д. Через:

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/
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/

Я попытался отредактировать файл setup.py, добавив следующую строку:

add_directory(library_dirs, "/usr/lib/x86_64-linux-gnu")

На самом деле, запуск $ sudo python setup.py install показывает, что доступна поддержка JPEG, ZLIB / PNG и т. Д.(Я устанавливаю его как для 2.5, так и для 2.7, не работает ни в одном из них)

sudo python2.5 setup.py install
running install
running build
running build_py
running build_ext
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.5.6 (r256:88840, Feb  1 2012, 15:55:08)
              [GCC 4.5.2]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available

Но после всего этого я все еще получаю ошибку decoder %s not available.

Я в своем уме.Что-нибудь еще, что я мог пропустить?

Моя среда: 64-битная Ubuntu 11.04 , работающая на виртуальной машине VirtualBox.

Вот что я делаю, чтобы проверить, работает ли PIL или нет

$ python
>>> from PIL import Image
>>> im = Image.open("photo.jpg")
>>> im.rotate(45)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1359, in rotate
  self.load()
File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 189, in load
  d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 385, in _getdecoder
  raise IOError("decoder %s not available" % decoder_name)
IOError: decoder zip not available
>>> 

Ответы [ 4 ]

12 голосов
/ 10 февраля 2012

Как всегда, воспользуйтесь менеджером пакетов:

sudo apt-get install python-imaging

Он все решит за вас.Доступны пакеты .

Установка вручную в любом дистрибутиве Linux - это напрасная попытка, если пакеты на самом деле не существуют.Сопровождающие пакета тратят время на то, чтобы убедиться, что пакет работает и устанавливается правильно, нет смысла дублировать их усилия.Особенно, чтобы не устанавливать вручную то, что не имеет преимуществ пакета - нет автоматического обновления, нет простого удаления и т. Д. *

2 голосов
/ 02 февраля 2014

Я успешно переустановил PIL в Ubuntu 12.04 следующим образом:

pip uninstall PIL
apt-get install libjpeg8 libjpeg62-dev libfreetype6 libfreetype6-dev
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/
pip install -U PIL

Он больше не поднимает IOError: decoder zip not available после переустановки PIL. Моя трассировка ошибок была:

Traceback (most recent call last):
  File "convert_image.py", line 15, in <module>
    image.save('output.png')
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1406, in save
    self.load()
  File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 189, in load
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 385, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder zip not available
1 голос
/ 14 августа 2013

Попробуйте переустановить с нуля:

  1. Найдите lib / pythonXX / site-packages / PIL.Удалите всю эту директорию вместе с файлом PIL.pth.Это должно полностью удалить пакет.

  2. Распакуйте установочные файлы PIL из скачанного * tar.gz.

  3. Добавьте каталоги, в которыеБиблиотека jpeg, с add_directory (...), как вы делали раньше.(Используйте ldconfig -P | grep jpeg, чтобы найти библиотеки).

  4. Повторите сборку python setup.py, затем python setup.py install.Протестируйте его.

Мой опыт был таким:

Не выполнение шага 2 не перестроило пакет.Неисполнение шага 3 было основной причиной.Невыполнение шага 1, возможно, сыграло свою роль.

Кажется, это ошибка в установке PIL, а не в структуре пакетов Ubuntu или какого-либо дистрибутива.

И для справки: это довольноОбычно в системе установлено несколько версий Python, что делает необходимым установку пакетов вручную.У некоторых людей есть 2.x с 3.x для экспериментов, общие хостинги имеют 2.5s, а приложениям нужно 2.7, просто чтобы привести два примера.

0 голосов
/ 10 июля 2014

Я обнаружил, что это сочетание двух выше при установке в Ubuntu с помощью require.txt. Я использую Vagrant для запуска сценария шеф-повара и обнаружил, что этот подход лучше всего подходит для меня:

Сначала я использую скрипт bash для настройки PIL:

#!/usr/bin/env bash

sudo apt-get build-dep python-imaging
sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/
sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/
sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/

Далее, во время установки require.txt, верхняя часть файла выглядит так:

--allow-external PIL
--allow-unverified PIL

Django==1.5.4
PIL==1.1.7
...

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

...