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