Wie kann ich den Pfad von python importiert
Ich habe zyklischen import Probleme, neue code, um eine sehr große app, und ich bin versucht zu bestimmen, welche Dateien sind die wahrscheinlichsten Ursachen für diese. Es gibt es eine Möglichkeit um nachzuverfolgen, welche Dateien importieren, die Dateien? Ich habe ein bisschen auf der Suche und fand den python-trace-Befehl, aber es ist nur mit einem Bündel von Aktivitäten, die in den wichtigsten python-Bibliotheken.
Ich bin im Grunde auf der Suche nach einer app, die mir zeigen, so etwas wie:
App1 >>imports>> App2,App3.method
App2 >>imports>> App3,etc
Konnte ich nur ein Blick durch alle meine Dateien, aber ich möchte lieber nicht, es ist eine große app.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie eines dieser Skripte, um python-Modul-dependency-Graphen:
Ist hier eine einfache (und etwas rudimentär;-) Weg zu verfolgen ", wer versucht, zu importieren, was" in Bezug auf die Modul-Namen:
gibt, zum Beispiel (Sie gespeichert haben, dieses als
tracimp.py
):Wie Sie sehen, ist eine Besondere Eigenschaft der "Verpackung" der
__import__
built-in ist, dass es nicht zum schweigen gebracht werden, durch die Tatsache, dass ein Modul importiert wird, ist bereits insys.modules
: da kümmert, dass ist einer der__import__
's jobs, unsere wrapper aufgerufen wird, wird für beide Module "geladen, zum ersten mal" und diejenigen, die nur gehen, um Wert aussys.modules
wurden, weil Sie bereits zuvor importiert. Dies sollte in wirklich praktisch, wenn Sie versuchen, zu diagnostizieren, zirkuläre Importe (auf die es hinausläuft Suche nach Schleifen in den gerichteten Graphen, dessen Kanten sind dadurch gekennzeichnet, dass die zwei-Modul-Namen -- importiert und Importeur -- was dieser einfache Ansatz ist der Druck auf jedem Ausgang).Versuchen Sie es mit
python -v
um das Programm auszuführen. Es wird verfolgen Sie die Reihenfolge der Importe.Weitere option ist pylint, die alarmiert Sie zu allen möglichen Themen, einschließlich zyklische Importe.
env=PYTHONVERBOSE=1
Und der Ausgang geht in das, was angegeben wird auf der normalen uwsgi log-Datei.Sollte es nicht möglich sein, um eine zyklische import in python, weil es prüft, ob das Modul bereits importiert wurde, bevor Sie erneut importieren. Sie können nur ein Modul importieren einmal, egal wie viele Male Sie rufen importieren.
Vom http://groups.google.com/group/comp.lang.python/browse_thread/thread/1d80a1c6db2b867c?pli=1 :