Como uso o Python com apache2?

13

Estou tentando fazer com que o Python funcione com o Apache, no entanto, não consigo ter sucesso com o CGI ou o mod_python.

Alguém conhece um bom tutorial ou algo assim?

Obrigado.

Vallery
fonte

Respostas:

17

mod_pythoné basicamente não mantido - você deve analisar mod_wsgi. Instale o pacote libapache2-mod-wsgie emita sudo a2enmod wsgipara habilitá-lo.

Apenas como um exemplo rápido para fazê-lo funcionar, coloque algo como isto em seu /etc/apache2/sites-enabled/default:

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

E no arquivo /path/to/python/file.py:

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

Após reiniciar o Apache2, qualquer solicitação para /testse transformará em uma chamada application()no seu arquivo python.

Para uma leitura mais aprofundada, consulte o WSGI (WebServer Gateway Interface), a maneira como o Python se integra aos servidores da web.

Bônus / Atualização:

Python (sem surpresa) tem um pequeno servidor WSGI na biblioteca padrão para teste. Se você adicionar isso na parte inferior do arquivo, poderá executá-lo como qualquer executável antigo para fins de teste e deixar o Apache assumir a produção:

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

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

    httpd.serve_forever()
Morten Siebuhr
fonte
Recebi o seguinte como erro, fora do log do apache. Até onde eu sei, ele acha que não está recebendo uma string.
Vallery
[Sat Mar 05 17:06:14 2011] [erro] [cliente 127.0.0.1] mod_wsgi (pid = 2844): Ocorreu uma exceção ao processar o script WSGI '/var/www/file.py'. [Sáb 05 de março 17:06:14 2011] [erro] [cliente 127.0.0.1] Traceback (última chamada mais recente): [Sáb 05 de março 17:06:14 2011] [erro] [cliente 127.0.0.1] Arquivo " /var/www/file.py ", linha 2, no aplicativo [Sat Mar 05 17:06:14 2011] [erro] [cliente 127.0.0.1] start_response (200, [('Content-Type', 'text / plain ')]) [Sat Mar 05 17:06:14 2011] [erro] [cliente 127.0.0.1] TypeError: objeto esperado da string de bytes para status, valor do tipo int encontrado
Vallery
Ah Foi mal. Estou acostumado a frameworks fazendo todo o material complicado para mim;). Eu atualizei o 200para '200 OK'por python.org/dev/peps/pep-0333
Morten Siebuhr
Ótimo, isso funciona. Última pergunta: como faço para exibir em html? Meu navegador mostra o retorno em texto sem formatação, ignorando a marcação.
Vallery
1
Espere, entendi: altere text / plain para text / html.
Vallery