Сборка mod_python: связка Python — Apache


Общие замечания
Современный mod_python не поддерживает Apache 1.3. Вам понадобится Apache старше 2.0.

Сборка mod_python
В сборке mod_python очень прост.

Наиболее ценными являются две опции конфигурирования:

./configure —prefix=$inst_pref \
—with-apxs=$ap_pref/bin/apxs

Опция —prefix понадобится вам для установки компонентов mod_python в нестандартную директорию. (Даже при её указании модули Python'а будут установлены в дерево библиотек Python'а, имейте это ввиду.)

Опция —with-apxs понадобится, если ваш сервер установлен в нестандартную директорию.

Трудности
Ничего не работает
Mod_python требует поддержки нитей. Если сервер собран без поддержки нитей, то при старте вы увидите грозное сообщение об ошибке на подобии этого:

Cannot load /usr/home/c/local/modules/mod_python.so into server:
/usr/home/c/local/modules/mod_python.so:
Undefined symbol "pthread_attr_init"

(Оно выдаётся в одну строку.)

Решается проблема очень просто: вам надо заставить Apache загрузить библиотеку libc_r.so. Для этого вы можете установить переменную окружения:

export LD_PRELOAD=/usr/lib/libc_r.so

Или просто добавить эту инструкцию в скрипт envvars (который выполняется скриптом apchectl перед запуском сервера) или, на худой конец, непосредственно в apchectl.
Сервер запустился но пример из документации не работает

Mod_python снабжён превосходной документацией, но компактность изложения не прощает невнимательности. Если вы пробежитесь по документации и попытаетесь запустить пример со страницы http://www.modpython.org/live/current/doc-html/inst-testing.html, то скорее всего вы получаете в окне браузера ошибку:


ImportError: No module named mptest

Это значит, что модуль не может быть найден. Выхода два: либо разместите модуль там, где Python сможет его найти, либо добавьте в пути для поиска модулей каталог, где размещаете свои скрипты. Второй способ представляется мне более разумным. Просто добавьте в конфигурационный файл сервера инструкцию:

PythonPath "sys.path + ['/usr/home/a/work/python/lib']"

(Путь, естественно, замените на свой.)

Всё. Думаю, что тестовый пример у вас заработал. Можно двигаться дальше.
Apxs не работает

Утилита apxs написана на Perl, если в системе нет Perl, то Apache соберётся, Python соберётся, но вот apxs работать не будет и mod_python не соберётся. Самое простое решение: поставить Perl.


Комментарии запрещены.




Статистика