Сборка 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.