[gelöst] mod_python für Anfänger unter SUSE

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ebel
User
Beiträge: 9
Registriert: Donnerstag 30. März 2006, 17:22

Liebes Forum,

ich möchte unter mod_python (für apache) ein kleines "Hallo Welt" Skript laufen lassen. Wo finde ich eine kurze Schritt-für-Schritt Anleitung für Anfänger um mod_python zu installieren und ein Skript laufen zu lassen. Leider ist die Installation nicht so einfach wie PHP. Ich benutze SUSE 10.2 und habe bereits mod_python unter YAST installiert und apache server neugestartet. Das reicht aber anscheinend nicht (wie bei PHP) aus um Python unter apache zum laufen zu bringen.

Meine Konfigurationen:
SUSE 10.2 mit:
apache 2.2.3-20
python 2.5-19
mod_python 3.2.10

Vielen Dank im voraus für die Hilfe
Gruß
ebel
Zuletzt geändert von ebel am Freitag 12. Januar 2007, 19:34, insgesamt 1-mal geändert.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

modpython.org ist dein Freund für Hilfe (alles in Englisch)

Da du Python und Apache schon hast musst du folgendes machen.
Gehe in die http.conf oder apache2.conf und befolge das hier:

die zeile muss rein, bzw entquote werden; pfad ggf anpassen.

Code: Alles auswählen

LoadModule python_module libexec/mod_python.so
( weiteres hier: http://modpython.org/live/current/doc-h ... onfig.html )


Dann folgendes noch (ich zeige wie es mit dem modpython.publisher geht den ich bevorzuge):

Code: Alles auswählen

<Directory /some/directory/htdocs/test> 
        AddHandler mod_python .py
        PythonHandler mod_python.publisher
        PythonDebug On 
</Directory>
In /some/directory/htdocs/test kommt dann z.B. die Datei index.py mit folgendem Inhalt:

Code: Alles auswählen

#! /usr/bin/env python2
#-*- coding: latin-1 -*-
from mod_python import apache

def index(req,text='kein text'):
    req.content_type = "text/html"
    req.write("INPUT: %s"%text)
Ein Aufruf der Adresse im Browser:
http://localhost/test/index.py/index?text=lol

ergibt folgende Ausgabe:
"INPUT: lol"

Pfad ``/some/directory/htdocs/`` muss natürlich angepasst werden.

PS: wenn das alles klappt folgende Seite anschauen:
http://modpython.org/live/current/doc-html/tut-pub.html
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Muss es unbedingt mod_python sein? Denn mod_python ist nicht das Python-Aquivalent zu mod_php aus der PHP-Welt. In der Tat nutzt kaum jemand mod_python und viele Leute steigen dann nach kurzer Zeit auf etwas anderes, flexiblereres um.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

habe das schon oft gelesen, wie du gerade sagst mit kein mod_python direkt nutzen usw. aber wie meinst du ( bzw. andere ) das mit unflexible? mod_python tut das was ich will, genau wie ich es will und ist schneller als CGI.

Was gibt es für Gründe auf andere Software umzusteigen? Was sind die alternativen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sr4l hat geschrieben:habe das schon oft gelesen, wie du gerade sagst mit kein mod_python direkt nutzen usw. aber wie meinst du ( bzw. andere ) das mit unflexible? mod_python tut das was ich will, genau wie ich es will und ist schneller als CGI. Was gibt es für Gründe auf andere Software umzusteigen? Was sind die alternativen?
Zum Beispiel kannst du nur eine Version von Python mit mod_python laden - ich habe aber mehrere. Zum Beispiel muss es gegen den Apachen kompiliert sein. Das muss FastCGI auch, aber dafür kann es mehr. Zum Beispiel funktioniert es nur mit Apache - FastCGI funktioniert mit jedem Server der FastCGI unterstützt und das sind viel mehr. Achja, und dass sich die Performance mit mod_python messen kann, versteht sich von selbst.
Kann sogar sein, dass SCGI (und möchlicherweise auch FastCGI) sogar noch schneller ist, wenn man die Erfahrungen von LWN hier liest.

Was gibt es denn sonst noch für Alternativen.. es gibt auch noch das schon angesprochene SCGI - ein vereinfachtes FastCGI, CherryPy (siehe TurboGears) etc.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Ich bin von CGI auf FastCGI umgestiegen und der Geschwindigkeitszuwachs war enorm.

Mit mod_python bin ich nie weit gekommen, weil mich die Struktur schon fast erschlagen hat. Handler hier, Publisher da, die Anwendung muss das und das... viel zu überladen und undurchsichtig.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

siehste ich kenne mich mit mod_python aus und denke genau das von den anderen lösungen. Habe genau das Bild was du von mod_python hast von den anderen. ^^
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sr4l hat geschrieben:siehste ich kenne mich mit mod_python aus und denke genau das von den anderen lösungen. Habe genau das Bild was du von mod_python hast von den anderen. ^^
Aber ich habe mod_python (damals noch 2.7 mit Apache 1.3) probiert und für unangenehm befunden.

Andererseits, gegen CherryPy fühlt sich sowieso alles unbequem an. Besonders mod_python (habe ich schon erwähnt, dass man zum Reloaden den Apache-Prozess neu starten muss?).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ebel
User
Beiträge: 9
Registriert: Donnerstag 30. März 2006, 17:22

Vielen Dank erstmal an Sr4l, hat alles mit leichten SUSE spezifischen Änderungen geklappt.

Hier meinen Beitrag für die Welt: ein kleines shellscript, die SUSE 10.2 benutzen, zur Installation von mod_python und einer test Datei geschrieben:

Für eventuelle Schäden nehme übernehme ich keine Verantwortung. ACHTUNG muss als root ausgeführt werden

Den unteren Teil makieren und in Einer Datei mit dem Namen makeModPython.sh speichern anschgließend als superuser mit su einloggen und Datei mit

Code: Alles auswählen

chmod 700 makeModPython.sh
ausführbar machen. Falls ihr noch nicht apache2, python oder apache2-mod_python installiert habt, müßt ihr die Zeile

Code: Alles auswählen

# yast -i apache2 python apache2-mod_python
verändern in

Code: Alles auswählen

yast -i apache2-mod_python
ämndern wenn z.B. nur noch mod_python fehlt
Nun auf der Konsole ./makeModPython.sh eingeben
Wundert euch nicht jetzt läuft erstmal YAST mit blauem Bildschirm
Jetzt müßte eingentlich schon alles passiert sein
und unter http://localhost/test_mod_python/test.py müßte das Skript jetzt laufen

Code: Alles auswählen

#!/bin/bash
# apache Webserver, python und entsprechende Python Modul fuer Apache installieren
#yast -i apache2 python apache2-mod_python
# eine extra http.conf Namen festlegen
f="/etc/apache2/http.conf.test_mod_python"
# Nun wird die Datei geschrieben
# 1. Zeile bewirkt, dass mod_python geladen wird
# 2. Zeile wird festgelegt fuer welchen Ordner das gilt
echo "LoadModule python_module /usr/lib/apache2/mod_python.so" > $f
echo "<Directory /srv/www/htdocs/test_mod_python/>" >> $f
echo "        AddHandler mod_python .py" >> $f
echo "        PythonHandler mod_python.publisher" >> $f
echo "        PythonDebug On" >> $f
echo "</Directory>" >> $f
# Nun muss noch ein Eintrag in der /etc/sysconfig/apache2 gemacht werden um zu errecihen,
# dass die /etc/apache2/http.conf.test_mod_python auch von apache genutzt wird
# Sicherheitskopie anlegen
cd /etc/sysconfig/
mv apache2 apache2.backup
finde='APACHE_CONF_INCLUDE_FILES=\"\"'
ersetze='APACHE_CONF_INCLUDE_FILES=\"/etc/apache2/http.conf.test_mod_python\"'
# text ersetzen
# ACHTUNG falls ihr schon was in APACHE_CONF_INCLUDE_FILES eingetragen habt funktioniert diese Zeile nartuerlich nicht
sed s^$finde^$ersetze^g apache2.backup > apache2
# apache neu starten
rcapache2 restart
# eine testdatei im 
cd /srv/www/htdocs/
mkdir test_mod_python
cd test_mod_python
echo "#!/usr/bin/python" > test.py
echo "#-*- coding: latin-1 -*-" >> test.py
echo "from mod_python import apache" >> test.py	
echo "def index(req,text='blabla'):" >> test.py
echo '    req.content_type = "text/html"' >> test.py
echo '    req.write("INPUT: %s"%text)' >> test.py
Würde mich freuen wenn ihr es mal ausprobiert und eure Erfahrungen für andere hier berichtet.
Antworten