12 Stimmen

Das Ausführen von Python aus einer virtualenv mit Apache/mod_wsgi unter Windows

Ich versuche, den WAMP-Server einzurichten. Apache funktioniert korrekt, und ich habe mod_wsgi problemlos installiert.

Das Problem ist, dass ich virtuelle Umgebungen (mit virtualenv) für meine Projekte verwende. Offensichtlich hat mod_wsgi Probleme, meine Installation von Django zu finden.

Ich versuche zu verstehen, wie ich mod_wsgi dazu bringen kann, gut mit den virtuellen Umgebungen zu funktionieren. Die Dokumentation scheint zu glauben, dass dies nicht möglich ist:

Beachten Sie, dass die WSGIPythonHome-Direktive nur auf UNIX-Systemen verwendet werden kann und auf Windows-Systemen nicht verfügbar ist. Dies liegt daran, dass auf Windows-Systemen der Speicherort der Python-DLL scheinbar bestimmt, wo Python nach den Python-Bibliotheksdateien sucht. Es ist nicht bekannt, wie man zu diesem Zeitpunkt eine separate Basisumgebung unabhängig von der Haupt-Python-Installation unter Windows erstellen könnte.

Von hier: mod_wsgi + virtualenv-Dokumentation.

Hat jemand eine Idee, wie man dies zum Laufen bringen kann?

13voto

albertov Punkte 2300

Sie können die Umgebung programmgesteuert von Python aus aktivieren, indem Sie dies Ihrer .wsgi-Datei hinzufügen, bevor Sie etwas anderes importieren.

Von virtualenv's Dokumentation:

Manchmal können Sie den vom virtualenv erstellten Python-Interpreter nicht verwenden oder möchten dies nicht. Zum Beispiel gibt es in einer mod_python- oder mod_wsgi-Umgebung nur einen Interpreter.

Zum Glück ist es einfach. Sie müssen den benutzerdefinierten Python-Interpreter verwenden, um Bibliotheken zu installieren. Aber um Bibliotheken zu verwenden, müssen Sie nur sicherstellen, dass der Pfad korrekt ist. Ein Skript ist verfügbar, um den Pfad zu korrigieren. Sie können die Umgebung wie folgt einrichten:

activate_this = '/Pfad/zur/Umgebung/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

Dadurch werden sys.path und sogar sys.prefix geändert, ermöglicht es Ihnen jedoch, einen vorhandenen Interpreter zu verwenden. Elemente in Ihrer Umgebung werden zuerst auf sys.path angezeigt, bevor globale Elemente erscheinen. Dies kann jedoch nicht die Aktivierung anderer Umgebungen oder importierter Module rückgängig machen. Sie sollten beispielsweise nicht versuchen, eine Umgebung vor einer Webanforderung zu aktivieren; Sie sollten eine Umgebung so früh wie möglich aktivieren und dies nicht erneut in diesem Prozess durchführen.

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