从多个Python文件生成函数调用树

时间:2014-12-03 10:43:23

标签: python pyscripter code-inspection wing-ide

我继承了一堆Python文件,并通过收集有关已在这些文件中定义和调用的所有函数的信息,寻找一种方法来了解其中发生的事情。

文件示例(MainModule.py):

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

通过查看此文件,我希望IDE报告在此文件中定义了哪些函数(这是我可以使用Wing IDE执行的操作),还有哪些函数(在.py文件中定义的函数)文件夹或项目)被调用。显而易见,我不想报告使用Python系统函数(例如print()等),但只报告在我的项目中的文件中定义的那些函数(可能是文件夹,不是&#39)真的很重要。)

所以在这个例子中,我想得到这样的东西:文件MainFunction.py函数中的分别从Module1.py文件和Module2.py文件调用funcX和funcY 。我将使用此信息在Visio(或其他一些软件)中构建一个参考模式,我将在重构代码时使用它。

我知道在WingIDE中使用查找使用点和转到定义,但阅读20个文件寻找功能会太麻烦。

我使用过PyScripter和WingIDE Pro,但似乎这些IDE缺乏此功能。 IDE支持哪种操作?如果没有,是否还有其他直接的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

通过静态分析生成动态语言的调用图实际上是不可能的(即使简单示例可以进行近似)。因此,它通常在运行时通过使用像pycallgraph(https://pypi.python.org/pypi/pycallgraph)之类的东西动态完成。

因此,对Python代码的良好单元测试覆盖率至关重要。如果缺乏单元测试,在解决重构之前,改进单元测试覆盖率可能是一个非常有价值的步骤。

以前的StackOverflow问题也涉及到这个问题:Build a Call graph in python including modules and functions?