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 dassmod_python/Apache
war nicht in der Lage zu lesen, dieeggs
. Seit ich die alle Pakete innerhalb der virtuellen Umgebung miteasy_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 fehlendenweb
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 vonsite-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.