[英]Generate function calls tree from multiple Python files
我继承了一堆 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()
等),而只想报告在我的项目中的文件中定义的那些函数(可能是文件夹,并不重要)。
所以在这个例子中,我想得到这样的东西:在文件 MainFunction.py 中,函数 funcX 和 funcY 分别从 Module1.py 文件和 Module2.py 文件中调用。 我将使用此信息在 Visio(或其他一些软件)中构建参考架构,我将在重构代码时使用该架构。
我知道在 WingIDE 中使用 Find point of use 和 Goto 定义,但通读 20 个文件寻找函数会太麻烦。
我使用过 PyScripter 和 WingIDE Pro,但这些 IDE 似乎缺少此功能。 什么IDE支持这种操作? 如果没有,有没有其他直接的方法来实现这一目标?
通过静态分析生成动态语言的调用图实际上是不可能的(即使对于简单的示例来说可能是近似的)。 因此,通常使用诸如pycallgraph( https://pypi.python.org/pypi/pycallgraph )之类的方法在运行时动态完成。
因此,良好的Python代码单元测试覆盖至关重要。 如果缺少单元测试,那么在进行重构之前,提高单元测试的覆盖率可能是非常有价值的一步。
这是之前的StackOverflow问题,也涉及到此问题: 用python构建包括模块和函数的调用图?
目前不再维护原始 pycallgraph。 使用 Python 3.9 时我什至无法安装它。
但是创建了一些分支,最近活跃的是 CallGraph4Py:
在 Windows 上记得安装 Graphviz ,这是生成图像所必需的。
用法示例:
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
def a1():
print("a1")
def a2():
print("a2")
def a3():
a1()
print("a3")
def a4():
a3()
a2()
print("a4")
with PyCallGraph(output=GraphvizOutput()):
a4()
它在项目文件夹中生成None
文件名的图像,需要添加.png
扩展名才能查看它。
生成的图像:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.