2008-10-24 13 views
7

Ich habe eine Reihe von C-Dateien, die von einer Sammlung von Python-Programmen, die eine Reihe von gemeinsamen Python-Module haben generiert werden, und ich muss dies in meinem make-System berücksichtigen.Makefile Abhängigkeiten für Python-Code

Es ist einfach genug aufzuzählen, welches Python-Programm zum Erzeugen jeder C-Datei ausgeführt werden muss. Wofür ich keine gute Lösung finden kann, ist herauszufinden, von welchen anderen Python-Dateien diese Programme abhängen. Ich brauche das, damit make weiß, was regeneriert werden muss, wenn sich eine der gemeinsamen Python-Dateien ändert.

Gibt es ein gutes System zum Erstellen von Abhängigkeitsregeln für Make-Stil aus einer Sammlung von Python-Quellen?

Antwort

3

modulefinder kann get the dependency graph verwendet werden.

+0

Beachten Sie, dass einige Module (z. B. PIL) funky Dinge mit dynamischen importieren, so dass Modulfinder manchmal Hilfe benötigt, um alles zu lokalisieren. –

1

Die import Anweisungen sind so ziemlich alle Abhängigkeiten, die es gibt. Es gibt zwei relevante Formulare für die Import-Anweisungen:

import x, y, z 
from x import a, b, c 

Sie brauchen auch die PYTHONPATH und sites Informationen, die verwendet wird sys.path zu bauen. Dies zeigt die physischen Positionen der Module und Pakete.

Das ist etwas mühsam zu verarbeiten, da Sie die transitive Schließung aller Importe in allen Modulen durchführen müssen, die Sie importieren.

Alternativ können Sie die Option -v verwenden, um die vollständige Liste der Importe und physischen Dateien zu erhalten. Dies erzeugt ein Protokoll, das Sie in eine flache Liste von Abhängigkeiten bearbeiten können.

Zum Beispiel, wenn ich

>>> import math 

Ich sehe dies im Protokoll

dlopen("/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/math.so", 2); 
import math # dynamically loaded from /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/math.so 
Verwandte Themen