我有一堆C程序文件,這些文件是由一些Python程序集合生成的,這些程序有很多共享的Python模塊,我需要在我的make系統中對此進行說明。如何做python代碼的Makefile依賴關係
很容易枚舉哪個python程序需要運行來生成每個C文件。我找不到一個好的解決方案是確定這些程序依賴於哪些其他python文件。我需要這個,所以如果一個共享的python文件改變,make會知道需要重新生成什麼。
是否有一個很好的系統從python源代碼集合中生成make樣式依賴關係規則?
我有一堆C程序文件,這些文件是由一些Python程序集合生成的,這些程序有很多共享的Python模塊,我需要在我的make系統中對此進行說明。如何做python代碼的Makefile依賴關係
很容易枚舉哪個python程序需要運行來生成每個C文件。我找不到一個好的解決方案是確定這些程序依賴於哪些其他python文件。我需要這個,所以如果一個共享的python文件改變,make會知道需要重新生成什麼。
是否有一個很好的系統從python源代碼集合中生成make樣式依賴關係規則?
import
語句幾乎是所有的依賴關係。有針對import語句兩個相關表格:
import x, y, z
from x import a, b, c
您還需要用來建立sys.path
的PYTHONPATH
和sites
信息。這顯示了模塊和包裝的物理位置。
這樣做很痛苦,因爲您必須在導入的所有模塊中執行所有導入的傳遞閉包。
作爲一種替代方法,您可以使用-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
請注意,某些模塊(例如PIL)使用動態導入功能做出時髦的事情,所以模塊化器有時需要一些幫助來查找所有內容。 – 2008-10-24 05:33:46