2008-08-07 5 views

Antwort

12

Es gibt zwei Hauptmöglichkeiten, Python auf Apache auszuführen. Am einfachsten wäre es, CGI zu verwenden und normale Python-Skripte zu schreiben, während das zweite ein Web-Framework wie Django oder Pylons verwendet.

Die Verwendung von CGI ist einfach. Stellen Sie sicher, dass Ihre Apache-Konfigurationsdatei ein cgi-bin eingerichtet hat. Wenn nicht, folgen Sie deren Dokumentation (http://httpd.apache.org/docs/2.0/howto/cgi.html). An diesem Punkt müssen Sie nur Ihre Python-Skripte im cgi-bin-Verzeichnis ablegen und die Standardausgabe wird zur HTTP-Antwort. Weitere Informationen finden Sie in der Python-Dokumentation (https://docs.python.org/library/cgi.html).

Wenn Sie ein Web-Framework verwenden möchten, müssen Sie mod_python oder FastCGI einrichten. Diese Schritte hängen davon ab, welches Framework verwendet werden soll. Django bietet klare Anweisungen zur Einrichtung von mod_python und Django mit Apache (http://www.djangoproject.com/documentation/modpython/)

+2

Die Informationen zu mod_python wurden von der Django-Projektseite entfernt, da sie jetzt mod_wsgi empfehlen - https://docs.djangoproject.com/en/1.5/howto/deployment/wsgi/modwsgi/ –

8

Ja, mod_python ist ziemlich verwirrend einzurichten. Hier ist, wie ich es gemacht habe.

In httpd.conf:

LoadModule python_module modules/mod_python.so 

<Directory "/serverbase/htdocs/myapp"> 
    AddHandler mod_python .py 
    PythonHandler myapp 
    PythonDebug On 

und in Ihrem Anwendungsverzeichnis:

$ /serverbase/htdocs/myapp$ ls -l 
total 16 
-r-xr-xr-x 1 root sys  6484 May 21 15:54 myapp.py 

Wiederholen Sie die Konfiguration für jede Python-Programm möchten Sie laufen unter mod_python haben.

5

Führen Sie Python unter UNIX oder Windows?

Eine Alternative zu mod_python und FastCGI ist mod_wsgi. Mehr erfahren Sie unter modwsgi

Ich habe diese auf Solaris ohne Probleme gebaut und installiert. Ich hatte zuvor versucht, mod_python, aber als Teil der Erstellung Probleme mit Shared Libraries. Es sind good install docs verfügbar.

0

Das Problem für mich war nicht in Apache eingerichtet, aber zu verstehen, wie mod_apache tatsächlich die .py-Dateien verwendet. Anweisungen auf Modulebene (einschließlich der in einem if __name__=='__main__' Abschnitt) sind nicht ausgeführt - ich nahm an, dass das Stdout vom Ausführen des Skripts auf der Befehlszeile wäre, was der Server ausgeben würde, aber so funktioniert es nicht.

Stattdessen schrieb ich eine Modul-Level-Funktion namens index(), und hatte es als Zeichenfolge den HTML-Code der Seite zurückgeben. Es ist auch möglich, andere Modul-Level-Funktionen zu haben (zB otherFunction()), die als weitere Segmente in der URI (testScript.py zB testScript/otherFunction für die Datei.) Zugegriffen werden kann

Offensichtlich macht dies mehr Sinn als meine ursprüngliche stdout Konzeption . Bessere Möglichkeit, Python tatsächlich als Skriptsprache und nicht als eine riesige Auszeichnungssprache zu verwenden.

Verwandte Themen