Как мне использовать Python с apache2?

13

Я пытаюсь заставить Python работать с Apache, однако мне не удается добиться успеха ни с CGI, ни с mod_python.

Кто-нибудь знает хороший учебник или что-то?

Благодарю.

Vallery
источник

Ответы:

17

mod_pythonв основном не поддерживается - вы должны посмотреть mod_wsgi. Установите пакет libapache2-mod-wsgi, затем выполните команду , sudo a2enmod wsgiчтобы включить его.

Просто в качестве быстрого примера, чтобы запустить его, добавьте что-то вроде этого в свой /etc/apache2/sites-enabled/default:

WSGIScriptAlias /test /path/to/python/file.py

И в файле /path/to/python/file.py:

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return "Hello World"

После перезапуска Apache2 любой запрос в вашем файле python /testпревратится в вызов application().

Для дальнейшего чтения, заглянуть в WSGI (WebServer Gateway Interface), то путь Python интегрируется с веб-серверами.

Бонус / Обновление:

Python (неудивительно) имеет небольшой WSGI-сервер в стандартной библиотеке для тестирования. Если вы добавите это в конец вашего файла, вы можете запустить его как любой старый исполняемый файл для целей тестирования, а затем позволить Apache вступить во владение для производства:

if __name__ == '__main__':
    from wsgiref.simple_server import make_server

    httpd = make_server('', 8080, application)
    print "Serving on http://localhost:8080"

    httpd.serve_forever()
Мортен Зибур
источник
Я получил следующее сообщение об ошибке из журнала apache. Насколько я могу судить, он думает, что не получит строку.
Vallery
[Суббота, 05 марта 17:06:14 2011] [ошибка] [клиент 127.0.0.1] mod_wsgi (pid = 2844): произошла исключительная ситуация при обработке сценария WSGI '/var/www/file.py'. [Суббота, 05 марта 17:06:14 2011] [ошибка] [клиент 127.0.0.1] Трассировка (последний последний вызов): [суббота, 05 17:06:14 2011] [ошибка] [клиент 127.0.0.1] Файл " /var/www/file.py ", строка 2, в приложении [Сб. 05 марта 17:06:14 2011] [ошибка] [клиент 127.0.0.1] start_response (200, [('Content-Type', 'text / plain ')]) [Sat Mar 05 17:06:14 2011] [error] [client 127.0.0.1] TypeError: ожидаемый объект байтовой строки для статуса, найдено значение типа int
Vallery
Ах. Виноват. Я привык к фреймворкам, которые делают все для меня;). Я обновил 200до '200 OK'per python.org/dev/peps/pep-0333
Мортен Зибур
Отлично, это работает. Последний вопрос: как мне сделать так, чтобы он отображался в html? Мой браузер показывает возврат в виде открытого текста, игнорируя разметку.
Vallery
1
Подождите, понял: измените текст / обычный текст на HTML / HTML.
Vallery