Я попытался выполнить пару обучающих руководств по настройке mod_python, но каждый раз терпел неудачу. У вас есть хорошее пошаговое руководство?
Моя dev devbox - OS X, производство - Centos.
Существует два основных способа запуска Python на Apache. Самое простое - использовать CGI и писать обычные скрипты Python, а второе - использовать веб-фреймворк, такой как Django или Pylons.
Использование CGI просто. Убедитесь, что в вашем конфигурационном файле Apache настроен cgi-bin. Если нет, следуйте их документации ( http://httpd.apache.org/docs/2.0/howto/cgi.html ). На этом этапе все, что вам нужно сделать, это поместить ваши скрипты Python в каталог cgi-bin, и стандартный вывод станет ответом HTTP. Обратитесь к документации Python для получения дополнительной информации ( https://docs.python.org/library/cgi.html ).
Если вы хотите использовать веб-фреймворк, вам нужно установить mod_python или FastCGI. Эти шаги зависят от того, какую платформу вы хотите использовать. Django предоставляет четкие инструкции по настройке mod_python и Django с Apache ( http://www.djangoproject.com/documentation/modpython/ )
Да, mod_python довольно запутан в настройке. Вот как я это сделал.
В httpd.conf:
LoadModule python_module modules/mod_python.so
<Directory "/serverbase/htdocs/myapp">
AddHandler mod_python .py
PythonHandler myapp
PythonDebug On
и в каталоге вашего приложения:
$ /serverbase/htdocs/myapp$ ls -l
total 16
-r-xr-xr-x 1 root sys 6484 May 21 15:54 myapp.py
Повторите настройку для каждой программы Python, которую вы хотите запустить под mod_python.
Вы используете Python в UNIX или Windows?
Альтернативой mod_python и FastCGI является mod_wsgi. Вы можете узнать больше на modwsgi
Я построил и установил это на Solaris без проблем. Ранее я пробовал mod_python, но столкнулся с проблемами с общими библиотеками как часть сборки. Доступны хорошие установочные документы .
Для меня проблема была не в настройке Apache, а в понимании того, как mod_apache на самом деле использует файлы .py. Операторы уровня модуля (в том числе и в if __name__=='__main__'
разделе) не выполняются - я предполагал, что вывод команды из сценария в командной строке будет выводиться сервером, но это не так.
Вместо этого я написал вызываемую на уровне модуля функцию index()
, и она возвращала в виде строки HTML-код страницы. Также возможно иметь другие функции уровня модуля (например, otherFunction()
), к которым можно обращаться как к дополнительным сегментам в URI (например, testScript/otherFunction
для файла testScript.py
).
Очевидно, это имеет больше смысла, чем моя первоначальная концепция стандартного вывода. Лучшая возможность фактически использовать Python в качестве языка сценариев, а не огромный язык разметки.