Wie verwende ich Python mit Apache2?

13

Ich versuche, Python mit Apache zum Laufen zu bringen, habe jedoch weder mit CGI noch mit mod_python Erfolg.

Kennt jemand ein gutes Tutorial oder so?

Vielen Dank.

Vallery
quelle

Antworten:

17

mod_pythonist im Grunde nicht gewartet - das sollten Sie sich ansehen mod_wsgi. Installieren Sie das Paket libapache2-mod-wsgiund geben Sie es aus sudo a2enmod wsgi, um es zu aktivieren.

Nur als schnelles Beispiel, um es zum Laufen zu bringen, packen Sie so etwas in Ihr /etc/apache2/sites-enabled/default:

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

Und in der Datei /path/to/python/file.py:

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

Nach dem Neustart von Apache2 wird jede Anfrage /testin einen Aufruf von application()in Ihrer Python-Datei umgewandelt.

Weiterführende Literatur, Blick in WSGI (WebServer Gateway Interface), die Art und Weise Python integriert mit Web-Servern.

Bonus / Update:

Python hat (nicht überraschend) einen kleinen WSGI-Server in der Standardbibliothek zum Testen. Wenn Sie dies unten in Ihre Datei einfügen, können Sie sie zu Testzwecken als eine beliebige alte ausführbare Datei ausführen und Apache dann für die Produktion übernehmen lassen:

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
quelle
Ich habe Folgendes als Fehler aus dem Apache-Protokoll erhalten. Soweit ich das beurteilen kann, glaubt es, dass es keine Schnur bekommt.
Vallery
[Sa Mär 05 17:06:14 2011] [Fehler] [Client 127.0.0.1] mod_wsgi (pid = 2844): Beim Verarbeiten des WSGI-Skripts '/var/www/file.py' ist eine Ausnahme aufgetreten. [Sa Mär 05 17:06:14 2011] [Fehler] [Client 127.0.0.1] Traceback (letzter Aufruf zuletzt): [Sa Mär 05 17:06:14 2011] [Fehler] [Client 127.0.0.1] Datei " /var/www/file.py ", Zeile 2, in der Anwendung [Sat Mar 05 17:06:14 2011] [Fehler] [Client 127.0.0.1] start_response (200, [('Content-Type', 'text / plain ')]) [Sat Mar 05 17:06:14 2011] [Fehler] [Client 127.0.0.1] TypeError: erwartetes Byte-String-Objekt für Status, Wert des Typs int gefunden
Vallery
Ah. Mein Fehler. Ich bin es gewohnt, dass Frameworks all die kniffligen Dinge für mich erledigen;). Ich habe das 200zu '200 OK'per python.org/dev/peps/pep-0333
Morten Siebuhr
Super, das klappt. Letzte Frage: Wie kann ich es in HTML anzeigen lassen? Mein Browser zeigt die Rückgabe im Klartext und ignoriert das Markup.
Vallery
1
Warten Sie, verstanden: Ändern Sie text / plain in text / html.
Vallery