2008-10-24 10 views
7

我有一堆C程序文件,這些文件是由一些Python程序集合生成的,這些程序有很多共享的Python模塊,我需要在我的make系統中對此進行說明。如何做python代碼的Makefile依賴關係

很容易枚舉哪個python程序需要運行來生成每個C文件。我找不到一個好的解決方案是確定這些程序依賴於哪些其他python文件。我需要這個,所以如果一個共享的python文件改變,make會知道需要重新生成什麼。

是否有一個很好的系統從python源代碼集合中生成make樣式依賴關係規則?

回答

3
+0

請注意,某些模塊(例如PIL)使用動態導入功能做出時髦的事情,所以模塊化器有時需要一些幫助來查找所有內容。 – 2008-10-24 05:33:46

1

import語句幾乎是所有的依賴關係。有針對import語句兩個相關表格:

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

您還需要用來建立sys.pathPYTHONPATHsites信息。這顯示了模塊和包裝的物理位置。

這樣做很痛苦,因爲您必須在導入的所有模塊中執行所有導入的傳遞閉包。

作爲一種替代方法,您可以使用-v選項來獲取完整的導入和物理文件列表。這會生成一個日誌,您可以編輯到一個平面的依賴關係列表中。

舉例來說,當我做

>>> import math 

我看到這個日誌

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