2 Stimmen

mod_python kann das Modul web.py in einer virtuellen Umgebung nicht finden

Ich habe eine kleine web.py Python-Anwendung, die ich gerne unter Apache mit mod_python . Die web.py Framework sowie andere Python-Module von Drittanbietern, auf die sich die betreffende Anwendung stützt, werden in einer virtuellen Umgebung installiert. Die virtuelle Umgebung wird innerhalb erstellt: /home/ayaz/Sandbox/Scrapper/

Der relevante Ausschnitt aus der Konfiguration des virtuellen Hosts für Apache, den ich für die Einrichtung dieser Anwendung verwende, lautet wie folgt:

<Location "/api">
    PythonPath "['/home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/', '/home/ayaz/project/'] + sys.path"
    #PythonHandler wsgiref.modpython_gateway::handler
    PythonHandler modpython_gateway::handler
    SetHandler python-program 
    PythonOption wsgi.application device_api::main
    PythonOption device_api /api/
</Location>

Wenn ich im Browser versuche, auf die /api URL erhalte ich jedoch eine 500 vom Server mit der Fehlermeldung in den Protokollen, dass die web Modul, das aus dem Modul device_api.py Datei (die meine Anwendung ist) nicht gefunden werden konnte; mit anderen Worten, ich sehe eine ImportError . Ich bin mir nicht sicher, warum es nicht in der Lage ist, die web Modul.

Ich weiß, dass die PythonPath Richtlinie funktioniert, zumindest teilweise Wenn man davon ausgeht, dass der Python-Interpreter in der Lage ist, die device_api.py Datei aus dem in dieser Richtlinie definierten Pfad. Es ist jedoch nicht in der Lage, die übrigen Module zu finden, für die der Pfad ebenfalls in der gleichen Richtlinie definiert ist.

Für jede Hilfe in dieser Sache wären wir sehr dankbar.

Danke!

UPDATE #1

Ned's Antwort h durch die site-packages Verzeichnis für die virtuelle Umgebung, die ich habe. Die Berechtigungen sahen zwar gut aus innerhalb des Verzeichnisses gut aussah, wurde mir klar dass mod_python/Apache war nicht in der Lage zu lesen, die eggs . Seit ich die alle Pakete innerhalb der virtuellen Umgebung mit easy_install , von Eiern. Wenn ich also zum Beispiel das [ ] /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/web.py-0.34-py2.5.egg/web/ i /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/ (d.h. aus dem Ei Datei/Verzeichnis), mod_python gestoppt sich über die fehlenden web m über den fehlenden Rest der Module von der Module von Drittanbietern).

I Benutzer und Gruppe, d.h. ayaz und ich überprüft, dass die Per /home/ayaz/.python-eggs Verzeichnis waren in Ordnung.

Ich habe dann Folgendes verwendet Verwendung von Eiern mit mod_python t der Django-Bereitstellungsdokumentation Seite. Aber es hat nicht geholfen. Schließlich habe ich in den sauren Apfel gebissen, und für jedes Drittanbieter-Modul t mod_python c finden konnte, habe ich das aktuelle Verzeichnis aus dem Ei für dieses Modul außerhalb von site-packages d virtuelle Umgebung. [ ] mod_python die Module zu finden.

N passiert, und warum mod_python ist nicht nicht in der Lage ist, die Eier durchzulesen.

1voto

Ned Deily Punkte 81039

Könnte es sich um ein Problem mit den Datei- oder Verzeichnisrechten handeln? Überprüfen Sie, ob alle Dateien und Verzeichnisse in Ihrem virtualenv site-packages sind über den Benutzernamen zugänglich, der Apache et mod_python laufen unter.

1voto

ayaz Punkte 10168

Um diese Frage zu beantworten, werde ich die Aktualisierungsabschnitte aus meiner Frage kopieren und sie als Antwort posten (da sie anscheinend bis zu einem gewissen Grad erklären, wie ich das Problem loswerden kann).

Ned's Antwort musste ich das Verzeichnis site-packages Verzeichnis für die virtuellen Umgebung, die ich habe. Während die Berechtigungen innerhalb des Verzeichnisses Verzeichnis gut aussah, wurde mir klar, dass mod_python/Apache nicht in der Lage war, die die Eier zu lesen. Da ich alle Pakete innerhalb der virtuellen Umgebung mit easy_install installiert habe, liegen sie sind sie alle in Form von Eiern. Wenn ich also zum Beispiel wenn ich zum Beispiel das Paket d /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/web.py-0.34-py2.5.egg/web/ i /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/ (im Wesentlichen aus dem Ei genommen Datei/Verzeichnis), hat mod_python aufgehört über das fehlende Webmodul zu beschweren Modul zu beschweren (natürlich begann es dann über den fehlenden Rest der Module von Module von Drittanbietern).

I Benutzer und Gruppe, nämlich ayaz, und ich habe überprüft, dass /home/ayaz/.python-eggs Verzeichnis waren gut.

Ich habe dann Folgendes verwendet U mod_python t Django-Deployment-Dokumentationsseite erklärt wird. Aber es hat nicht geholfen. Letztendlich habe ich in den in den sauren Apfel gebissen und für jedes Drittanbieter Modul, das mod_python beanstandet, habe ich nicht finden konnte, verschob ich das eigentliche Verzeichnis innerhalb des Eies für dieses Modul aus dem Ei heraus und in das Verzeichnis site-packages-Verzeichnis für die virtuelle Umgebung. Dadurch konnte mod_python die Module finden.

Ich bin mir wirklich nicht sicher, warum das so ist. passiert, und warum mod_python nicht nicht in der Lage ist, die Eier zu lesen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X