Tool zur Ermittlung von kreisförmigen Importe in Python/Django?

Habe ich eine Django-app und irgendwo in es ist ein rekursiver import, das Probleme verursacht. Aufgrund der Größe der app, ich habe da ein problem das aufzeigen der Ursache des kreisrunden importieren.

Ich weiß, dass die Antwort ist "einfach nicht schreiben zirkuläre Importe" aber das problem ist ich habe eine harte Zeit, herauszufinden, wo der kreisförmigen import aus, so dass im Idealfall ein tool, verfolgt das importieren zurück auf seine Herkunft wäre ideal.

Solch ein tool gibt? Abgesehen, dass ich das Gefühl, ich mache alles was ich kann, um zu vermeiden, circular import Probleme-Umzug-Importe an den unteren Rand der Seite, wenn möglich, verschieben Sie Sie innerhalb von Funktionen, anstatt Sie an der Spitze, etc. aber immer noch Probleme. Ich Frage mich, ob es irgendwelche Tipps oder tricks für die Vermeidung von Ihnen insgesamt.

Zu erarbeiten, ein bisschen...

In Django speziell wenn es auf einer kreisförmigen importieren, manchmal wirft es ein Fehler sein, aber manchmal geht es durch leise aber Ergebnisse in einer situation, wo bestimmte Modelle oder Felder einfach nicht, es. Frustrierend, geschieht dies oft in einem Kontext (sagen wir, das WSGI-server) und in der anderen nicht (die shell). So testen in der shell so etwas wie dies funktionieren wird:

Foo.objects.filter(bar__name='Test')

aber in der web-wirft den Fehler:

FieldError: Cannot resolve keyword "bar__name' ins Feld. Auswahlmöglichkeiten sind: ...

Mit mehreren Bereichen Auffällig fehlt.

Also kann es nicht ein einfaches problem mit dem code, da es hat arbeiten in der shell, aber nicht über die website.

Einige Tools, die herausfand, war genau das, was Los wäre große. ImportError ist vielleicht die am wenigsten hilfreich Ausnahmemeldung je.

  • python -vv wird Hilfe bei der Suche rekursiv Einfuhren. Beispiel: pastebin.com/3HpYgeC2
  • Gibt es eine Möglichkeit, zu organisieren, diese Ausgabe in einer Weise, so kann ich sehen, was aufgerufen wurde? Scheint so, das würde nur Arbeit für schwer-Rundschreiben-import-Probleme nicht die weichen, wie ich habe...
  • (Ich bin nicht sicher, ob dies wird Euch helfen, denn ich bin mir nicht sicher, wie Sie es in Ihrem WSGI-Umgebung). Sowieso, kann es helfen, mit "weichen"/"runtime" - Probleme beim import. Wie die Linie 627 der paste, wo ich einen Anruf manuell "importieren " django": es zeigt alle Dateien, die es versucht. Ich habe gerade getestet "import django.db" und zeigt alle Dateien, die es versucht, für alle Module, die von django.db. Ich weiß nicht, aber würde gerne wissen, eine bestehende Art und Weise das Ergebnis verbessern, weil es ist ein Schmerz, den ich vollkommen Zustimmen!!!
  • Die silent scheitern ist, weil Sie mehrere Module mit dem gleichen Namen. Dann, python import Bestellung (basierend auf pythonpath) ist die Referenz. Oh, wenn/wenn Sie den Namen ändern, stellen Sie sicher, entfernen Sie die .pyc auch 🙂 (ist es mir mehrmals passiert)
Schreibe einen Kommentar