Как установить PIL в Ubuntu 11.04?

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

Вот что я делаю, чтобы проверить, работает ли 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
>>> 

Ответ 1

Как всегда, используйте диспетчер пакетов:

sudo apt-get install python-imaging

Это все будет для вас. Доступны packages.

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

Ответ 2

Я успешно переустановил 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

Ответ 3

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

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

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

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

  • Восстановить python setup.py build, а затем установить python setup.py. Проверьте его.

Мой опыт:

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

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

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

Ответ 4

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

Во-первых, я использую bash script для установки 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/

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

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

Django==1.5.4
PIL==1.1.7
...

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