Ich versuche, ein wenig django Projekt mit der folgenden Apache-Konfiguration zu dienen:Apache mit virtualenv und mod_wsgi: Import: Kein Modul namens 'django'
Apache Virtualhost Konfiguration:
<VirtualHost *>
ServerName servername
[...]
<Directory "/path/to/project/project">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess project python-path=/path/to/project:/path/to/Envs/venv/lib/python3.5/site-packages
WSGIScriptAlias//path/to/project/project/wsgi.py
</VirtualHost>
ich habe auch die folgenden wsgi.py:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings")
application = get_wsgi_application()
ich habe kein Problem STATIC Dateien und Mediendateien zu dienen.
Ich überprüfte auch die Berechtigungen und versuchte, rekursiv 755, dann 777 zu meinem virtuosev Site-Paket-Verzeichnis zu verwenden. Es hat nicht funktioniert.
Aber wenn man versucht, die Wurzel meiner Website zu erreichen ich folgende erhalten:
from django.core.wsgi import get_wsgi_application
ImportError: No module named 'django'
Ich vermuten, dass es sich um ein Python-Pfad verwandtes Problem war, da django in meinem virtualenv installiert ist. Aber ich habe die relevanten Python-Pfade zum python-path
Attribut hinzugefügt, so dass ich nicht verstehe, warum es nicht funktioniert.
Ich denke auch, ich könnte add the relevant directory to my Python path in my wsgi.py by using the site
module, aber ich würde gerne verstehen, warum die Apache-Konfiguration, die ich versuchte, nicht genug ist. Habe ich etwas verpasst?
Wenn Sie Python 3.4 oder 2.7 verwenden, sollten Sie immer noch '' python-home'' verwenden. Ich kenne keine Probleme mit der Verwendung der nicht bevorzugten Art, '' python-path'' zu setzen, aber es ist einfach nicht das, was Sie tun sollten. Die '' python-home''-Option war die beste Möglichkeit, den Standort der virtuellen Umgebung für eine lange Zeit festzulegen. So lange, dass selbst Linux-Distributionen mit alten mod_wsgi-Versionen noch funktionieren sollten. Dies ist auch dann der Fall, wenn die Dokumentation möglicherweise noch nicht aktualisiert wurde. :-) –
@ graham-dumpleton Danke für deinen Rat. Aber in meinem Fall verwende ich Python 3.4, und die Einstellung war die "Python-Home" -Methode, wie Sie erwähnt haben. Meine Site kann jedoch nicht besucht werden, da Apache weiterhin den Fehler "Importfehler: Kein Modul namens 'Site'" sendet. Solange ich es auf "nicht bevorzugte Weise" konfiguriere, indem ich ":" wie der Fragesteller verwendete, wurde dieses Problem gelöst. Und ja, für Python 3.5 sollten Sie "python-home" verwenden, oder [ImportError: Kein Modul mit dem Namen 'django'] wird auftreten. – Valorad
Das bedeutet, dass Ihr mod_wsgi nicht wirklich für diese Version von Python kompiliert wurde. Sie können mod_wsgi nicht zwingen, eine andere Python-Version zu verwenden, für die es kompiliert wurde. Eines der Probleme bei der Verwendung von '' python-path'' ist, dass es nicht so gut angezeigt wird, wenn Sie die falsche Sache machen und versuchen, mod_wsgi zu zwingen, eine virtuelle Umgebung für eine andere Python-Version zu verwenden als für mod_wsgi. Wenn Sie '' python-home'' verwenden, wird es stattdessen fehlschlagen und Ihnen sagen, dass Sie etwas falsch machen. –