2010-06-22 3 views
9

Manchmal, wenn ich manage.py ausführen bekomme ich eine kryptische Nachricht in rot, die Error: cannot import name <Name> und nichts anderes sagt.Debugging kryptisch "Fehler: Name <Name> kann nicht importiert werden" auf Django

Offensichtlich ist dies ein einfacher Import oder Syntaxfehler und mit ein wenig Umschauen kann ich es normalerweise beheben. Zu anderen Zeiten dauert es jedoch einige Zeit, um herauszufinden, was genau ich falsch gemacht habe. Gibt es eine Möglichkeit, Django dazu zu bringen, in dieser Situation mehr Informationen auszuspucken?

Antwort

11

Dies ist ein lästiges Problem. Zum Glück wurde es (vor kurzem) behoben: siehe this ticket und this patch.

Wenn Sie nur Ihre lokale django-Installation hacken wollen (Sie laufen unter virtualenv oder buildout, oder?), Wechseln Sie zum Stammverzeichnis Ihres django-Verzeichnisses (das mit README, INSTALL, etc) und führen Sie dies aus:

curl "https://code.djangoproject.com/changeset/17197?format=diff&new=17197" | patch -p3\ 

Also, wenn Sie django Stamm laufen> 17197, installieren Sie den Patch auf Ihre django anwenden (es angewendet 1.2 für mich django), oder warten, bis django 1.4, werden Sie in der Lage sein, dies zu tun:

Und Sie erhalten eine vollständige Traceback statt nur den Fehler: kann nicht importieren ...

Voila!

+0

Ja, virtualenv ftw. Vielen Dank. –

+0

+ 1-Ed für die - Traceback-Referenz. Vielen Dank! –

-1

Dies passiert, wenn ein zirkulärer Import auftritt, wenn ein Modell von einem anderen abhängig ist und sich gegenseitig beim Ausführen von Code versucht, sich gegenseitig zu importieren.

Sie können die zwei Modelle einfügen, die Probleme verursachen.

Das wird uns helfen zu debuggen.

Auch passiert es manchmal mit Signalen, wenn Sie eine Signaldatei haben, fügen Sie bitte auch.

+1

Wie in der Frage angegeben, bin ich mir bewusst, dass es sich normalerweise um einen Importfehler oder einen Syntaxfehler handelt. Ich habe das Problem bereits behoben. Was ich möchte, ist eine effiziente Möglichkeit, dies beim nächsten Mal zu debuggen. –

Verwandte Themen