ImportError: Kein Modul namens django.core.wsgi
Ich bin bewegt, eine web-Anwendung aus einer Windows-Umgebung zu CentOS 5.11 und Apache, und alles installiert, ich erhalte eine 500
wenn ich versuche, das laden der Website. Die error log zeigt:
mod_wsgi (pid=5461): Target WSGI script '/usr/local/treehouse/wsgi/index.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=5461): Exception occurred processing WSGI script '/usr/local/treehouse/wsgi/index.wsgi'.
Traceback (most recent call last):
File "/usr/local/treehouse/wsgi/index.wsgi", line 11, in <module>
from django.core.wsgi import get_wsgi_application
ImportError: No module named 'django.core.wsgi'
Fand ich diese Frage (und verwandten), das scheint ähnlich zu sein, aber keiner der Antworten gibt es das Problem zu beheben. Ich bin nicht läuft in einem virtualenv
, und django scheint korrekt installiert werden, wie kann ich die problematische Aussage:
>>> from django.core.wsgi import get_wsgi_application
in der interaktiven Python-interpreter und es funktioniert Prima. Hier ist der Skript den Fehler verursacht (es ist nur die Standard -index.wsgi
, sehen Sie überall, Sie suchen für dieses Zeug):
import os, sys
sys.path.append('/usr/local/treehouse/apple')
sys.path.append('/usr/local/treehouse/apple/apple')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "apple.settings")
from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
Offensichtlich die Letzte Zeile, die den Fehler verursacht, aber hier ist der lustige Teil: die Letzte Zeile bleibt das problem, auch wenn ich dies einfach von oben zu:
import django.core
import django.core.handlers
Sowohl von der zugrunde liegenden Pakete importieren, ohne eine Anhängevorrichtung (django.core.wsgi
ist nur ein dünner wrapper um einige Funktionen in django.core.handlers.wsgi
). Es ist nur, wenn ich versuche, auf die wsgi
Pakete, dass Probleme auftreten. Inspektion sys.path
innerhalb dieses Skript zeigt alle im richtigen Verzeichnis (/usr/local/lib/python3.4/site-packages
usw.). Und wieder laufen die exakt gleichen code aus dem interaktiven interpreter verursacht keine Fehler.
Versuchte ich eine deinstallation/Neuinstallation von django (pip install django==1.6.5
), dann habe ich einen reset der VM zu einer völlig sauberen snapshot zu erstellen und umgebaut/neu installiert alles, und trotzdem bekomme ich das exakt gleiche Verhalten.
Was ist Los?
InformationsquelleAutor Henry Keiter | 2015-01-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige der django-Quelldateien nach unten gezogen durch
pip
gespeichert Windows-Zeilenenden: das heißt, Sie enden mit\r\n
eher als\n
. Auf *nix-Systemen, hat dies den Effekt, brechen die Importe in den betroffenen Dateien, denn anstatt auf der Suche nachdjango.core.wsgi
es versucht zu importierendjango.core.wsgi\r
.Dies ist der Grund, warum
django.core.handlers
können immer noch importiert werden: die__init__.py
Datei leer ist, so gibt es keine Zeilenenden beschädigt.Um es zu beheben, führen Sie
dos2unix
auf die betroffenen Dateien. Ich bin mir nicht sicher, wie viele Dateien tatsächlich betroffen sind (außer, dass es viele von Ihnen), damit ich Sie einfach auf alle von Ihnen mit einem schnellen Python-Skript für den interpreter:Et voilà, nicht mehr importieren Fehler!
Storytime
Stieß ich auf dieses Problem, nachdem ich begann hacking auf der
django
- source-Dateien in Verzweiflung. Ich bearbeitetdjango/core/__init__.py
(normalerweise leer), indem Sie diese:Ich geändert
index.wsgi
auch diese:und endete mit einem faszinierenden neuen Fehler:
In
django/core/__init__.py
, auf die ich zugreifen kanndjango/core/wsgi.py
. Aberdjango.core.handlers.wsgi
ist außerhalb der Reichweite. Ich löschte die änderungen zu reproduzieren das ursprüngliche Fehler-aber der Fehler hatte sich verändert. Nun war ich immer derNo module named 'django.core.handlers.wsgi'
auch ohne die explizite relative importieren.War dies, wenn es mich getroffen. Ich öffnete
django/core/handlers/wsgi.py
in gedit, klickte auf das Ende einer Zeile, drücken der Leertaste, gelöscht einfügen, und die Datei gespeichert. Sollte es ein no-op. Aber wenn ich neu gestartet den server, plötzlich ist der import-Fehler hatte, wechselte zu einem anderen django importieren. Die einzige logische Erklärung war, dass die Zeilenenden falsch waren, und durch re-speichern Sie die Datei in gedit wurde ich still zu fixieren.InformationsquelleAutor Henry Keiter