PIL (Python Imaging) в Snow Leopard

После перехода на Snow Leopard в Django перестали работать ImageField’ы. Причина оказалась в неработоспособном PIL’е, а точней в его привязке к libjpeg. (типичное сообщение об ошибке:

ImportError: dlopen(/Library/Python/2.6/site-packages/PIL/_imaging.so, 2): Symbol not found: _jpeg_resync_to_restart

Решение проблемы частично описано здесь (english) качаем отсюда:

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
cp /usr/share/libtool/config/config.sub .
cp /usr/share/libtool/config/config.guess .
./configure --enable-shared --enable-static
make
sudo make install

Однако мне “повезло” и я оказался в числе тех, у кого это сразу не заработало - причина была в “зоопарке” установленных libjpeg’ов.

Итак, делаем следующее:

Смотрим все зависимости _imaging:

otool -L /Library/Python/2.6/site-packages/PIL/_imaging.so

Получаем что-то вроде:

/Library/Python/2.6/site-packages/PIL/_imaging.so: /sw/lib/libjpeg.62.dylib (compatibility version 63.0.0, current version 63.0.0)

Дальше можно решить двумя способами: а) удалить “зоопарковую” библиотеку (в моем случае - из /sw/lib и пересобрать все заново) б) если удалять - не вариант, то можно перелинковать питоновский _imaging на правильную, свежесобраную библиотеку:

install_name_tool -change /sw/lib/libjpeg.62.dylib /usr/local/lib/libjpeg.62.dylib _imaging.so

После этого все должно работать :)

Python и полнотекстовый поиск (FTS) в Sqlite

Задача: получить поиск по всему тексту в питоне.

Качаем последний sqlite-amalgamation (основное отличие - вся библиотека в одном файле)

curl -O http://www.sqlite.org/sqlite-amalgamation-3.6.17.tar.gz

Распаковываем:

tar xzf sqlite-amalgamation-3.6.17.tar.gz

Переходим в sqlite-3.6.17: Конфигурируем с включенным FTS3:

CFLAGS="-Os -DSQLITE_ENABLE_FTS3=1" ./configure

Билдим и устанавливаем

make
sudo make install

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

Решение: используем свою собственную библиотеку только для питона:

Переходим в папку питона:

cd /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/

Изменяем линки в загрузочной библиотеке:

install_name_tool -change /usr/lib/libsqlite3.0.dylib /usr/local/lib/libsqlite3.dylib _sqlite3.so

Запускаем питон и проверяем:

python
Python 2.5.1 (r251:54863, Feb  6 2009, 19:02:12)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.6.17'