пятница, 16 сентября 2011 г.

Как установить PIL из исходников в Ubuntu 11.04

PIL (Python Image Library) - это библиотека для работы с изображениями в Python.
В Ubuntu эту библиотеку можно установить из репазитория. Но т.к. я использую в разработке zc.buildout и стараюсь создавать пакеты для деплоя максимально независимые от того, что установлено в системном Python-е , то убунтовский репазиторий мне не подходит. Следовательно PIL у меня собирается из исходников.

Начиная с Ubuntu 11.04 в системе произошли некоторые изменения, в результате которых установка PIL из исходников несколько затруднилась.

Проблема возникла из-за того, что Ubuntu 11.04 стала поддерживать одновременную установку пакетов предназначенных для разных архитектур (multiarch support). Т.е. теперь можно достаточно просто в 64-битной системе устанавливать 32-ух битные приложения и библиотеки.

В нашем случае это сказалось на расположении библиотек libjpeg62-dev и zlib1g-dev, которые необходимы для установки PIL из исходников. Если раньше они располагались в папке /usr/lib, то теперь они находятся в /usr/lib/i386-linux-gnu (или /usr/lib/x86_64-linux-gnu/ если у вас 64-битная система). Из-за этого инсталятор PIL не может найти этих библиотек, и собирает PIL без поддержки JPEG и PNG. После установки можно увидеть примерно следующие строчки:
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available

Вот первый вариант решения проблемы, так сказать "в лоб":
sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so /usr/lib/
sudo ln -s /usr/lib/i386-linux-gnu/libz.so /usr/lib/
sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so /usr/lib/

Второй вариант - в setup.py после строчки:
add_directory(library_dirs, "/usr/lib")
добавить:
add_directory(library_dirs, "/usr/lib/i386-linux-gnu")
Теоретически должно сработать, но не проверял.


Так же можно вместо libjpeg62-dev установить libjpeg8-dev. PIL вполне нормально собирается с ним. Но вот для поддержки PNG альтернативы к сожалению нет.


Ну и самый лучший на мой взгляд способ - не использовать PIL. Вместо этого использовать полностью совместимый с ним форк - Pillow. В нём поддержка multiarch уже давно добавлена. Кроме того в нём добавлена поддержка Linux3, setuptools (distribute) и проведён рефакторинг кода. Поддержка пакета осуществляется силами сообщества Plone и обновления выходят достаточно часто.

Комментариев нет:

Отправить комментарий