ich einen minimalen Ersatz für mod_python des publisher.py SchreibenPython-Modul Path
Die Grundvoraussetzung ist, dass es Module auf der Basis einer URL-Schema wird geladen:
/foo/bar/a/b/c/d
Wodurch/foo/sein könnte Ein Verzeichnis und 'bar' ist eine Methode ExposedBar in einer publizierbaren Klasse in /foo/index.py. Ebenso könnte/foo auf/foo.py und bar eine Methode in der exposed-Klasse sein. Die Semantik ist nicht wirklich wichtig. Ich habe eine Linie:
sys.path.insert(0, path_to_file) # /var/www/html/{bar|foo}
mod_obj = __import__(module_name)
mod_obj.__name__ = req.filename
Dann wird das Modul für die entsprechende Klasse/Funktionen/Methoden geprüft wird. Wenn der Prozess die verbleibenden URI-Daten so weit wie möglich erreicht, wird/a/b/c an diese Methode oder Funktion übergeben.
Dies funktioniert gut, bis ich /var/www/html/foo/index.py hatte und /var/www/html/bar/index.py
Wenn im Browser sehen, es ist ziemlich zufällig ist Die Option 'index.py' wird ausgewählt, obwohl ich den ersten Suchpfad auf '/ var/www/html/foo' oder '/ var/www/html/bar' gesetzt und dann __import __ ('index') geladen habe. Ich habe keine Ahnung, warum es entweder durch scheinbar zufällige Wahl zu finden ist. Dies wird angezeigt durch:
Diese Frage ist dann, warum würde der __import__ nach dem Zufallsprinzip entweder Index auswählen. Ich würde das verstehen, wenn der Pfad '/ var/www/html' wäre, aber nicht. Zweitens:
Kann ich ein Modul über seinen absoluten Pfad in ein Modulobjekt laden? Ohne Änderung von sys.path. Ich kann keine Dokumente auf __import__ oder new.module() dafür finden.
Sind Sie neu zu erfinden Turbogears? http://turbogears.org/ –
Nein, nur auf der Suche nach einem schlanken Publisher, der genau das tun wird, was ich brauche, nicht mehr und nicht weniger. Und meine Hände schmutzig zu machen, ist eine gute Möglichkeit, Python zu lernen. –
Eigentlich war meine Frage rhetorisch. Vielleicht möchten Sie sich sehr genau anschauen, was sie tun, es könnte Ihnen viel Zeit und Mühe ersparen. –