¿Cómo uso Python con apache2?

13

Estoy tratando de hacer que Python funcione con Apache, sin embargo, no logro tener éxito con CGI o mod_python.

¿Alguien sabe un buen tutorial o algo así?

Gracias.

Vallery
fuente

Respuestas:

17

mod_pythones básicamente no mantenido - deberías investigarlo mod_wsgi. Instale el paquete libapache2-mod-wsgi, luego emita sudo a2enmod wsgipara habilitarlo.

Solo como un ejemplo rápido para que funcione, ingrese algo como esto en su /etc/apache2/sites-enabled/default:

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

Y en el archivo /path/to/python/file.py:

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

Después de reiniciar Apache2, cualquier solicitud /testse convertirá en una llamada application()en su archivo python.

Para más información, consulte WSGI (WebServer Gateway Interface), la forma en que Python se integra con los servidores web.

Bonificación / Actualización:

Python (como era de esperar) tiene un pequeño servidor WSGI en la biblioteca estándar para realizar pruebas. Si agrega esto en la parte inferior de su archivo, puede ejecutarlo como cualquier ejecutable anterior para fines de prueba y luego dejar que Apache se haga cargo de la producción:

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
fuente
Obtuve lo siguiente como un error, fuera del registro de Apache. Por lo que puedo decir, cree que no está recibiendo una cadena.
Vallery
[Sáb Mar 05 17:06:14 2011] [error] [cliente 127.0.0.1] mod_wsgi (pid = 2844): Se produjo una excepción al procesar el script WSGI '/var/www/file.py'. [Sáb 05 de marzo 17:06:14 2011] [error] [cliente 127.0.0.1] Rastreo (última llamada más reciente): [Sáb 05 de marzo 17:06:14 2011] [error] [cliente 127.0.0.1] Archivo " /var/www/file.py ", línea 2, en la aplicación [Sat Mar 05 17:06:14 2011] [error] [cliente 127.0.0.1] start_response (200, [('Content-Type', 'text / plain ')]) [Sáb Mar 05 17:06:14 2011] [error] [cliente 127.0.0.1] TypeError: objeto de cadena de bytes esperado para el estado, valor del tipo int encontrado
Vallery
Ah Culpa mía. Estoy acostumbrado a que los frameworks hagan todas las cosas difíciles para mí;). He actualizado el 200a '200 OK'por python.org/dev/peps/pep-0333
Morten Siebuhr
Genial, eso funciona. Última pregunta: ¿cómo hago para que se muestre en html? Mi navegador muestra el retorno en texto plano, ignorando el marcado.
Vallery
1
Espere, lo tengo: cambie text / plain a text / html.
Vallery