2014-12-03 114 views
0

我已經繼承了一堆Python文件,並尋找一種方式來了解其內部發生的事情,方法是收集有關在這些文件中定義和調用的所有函數的信息文件。從多個Python文件生成函數調用樹

的文件的示例(MainModule.py):

Import module1 
Import module2 
Import module3 
  
... 
Def func1(): 
... 
Def func2(): 
... 
  
result1 = Module1.funcX(args) 
result2 = Module2.funcY(args) 
... 

通過觀察這個文件,我想IDE報告哪些職能已經在此文件中定義的(這是我可以用永IDE做),還會調用哪些函數(在同一文件夾或項目中的.py文件中定義的函數)。顯然,我不想報告使用Python系統函數(如print()等),但只有那些在我的項目文件中定義的函數(可能是一個文件夾,並不重要)。

所以在這個例子中,我想得到像這樣的文件:in MainFunction.py函數funcX和funcY分別從Module1.py文件和Module2.py文件調用。我將使用這些信息在Visio(或其他一些軟件)中構建參考模式,我將在重構代碼時使用它。

我知道在WingIDE中使用查找使用點和轉到定義,但是通過查找20個文件來查找函數會太麻煩。

我已經使用了PyScripter和WingIDE Pro,但是看起來這些IDE缺乏這種功能。什麼IDE支持這種操作?如果沒有,有沒有其他直接的方法來實現這一目標?

回答

2

通過靜態分析生成動態語言的調用圖實際上是不可能的(即使對於簡單示例,近似也是可能的)。因此通常在運行時通過使用諸如pycallgraph(https://pypi.python.org/pypi/pycallgraph)之類的東西來動態完成。

因此Python代碼的良好單元測試覆蓋率非常重要。如果缺乏單元測試,提高單元測試覆蓋率可能是解決重構之前非常有價值的一步。

這是一個以前的StackOverflow問題,也觸及了這一點:Build a Call graph in python including modules and functions?

+0

謝謝,@Hugo。我無法用graphviz使pycallgraph工作,所以我想我需要通過使用IDE和代碼搜索實用程序進行半手動操作。 – 2014-12-03 17:19:18