神器,轻松可视化 Python 程序调用流程

作者 | 周萝卜
今天我们来分享一个 Python 领域的神级第三方库 -- pycallgraph,通过该库并结合 graphviz 工具,就可以非常方便的完成 Python 应用程序调用流程的可视化工作~
我们先来看下效果图:

怎么样,很是惊艳吧~
下面我们就来一起完成这个可视化过程

安装 graphviz 工具
生成图片的过程,是依赖工具 graphviz 的,我们先进行下载安装
下载地址
http://www.graphviz.org/download/

实战
pip?install?pycallgraph
下面我们先写一个基础的代码
from?pycallgraph?import?PyCallGraph
from?pycallgraph.output?import?GraphvizOutput
class?Banana:
????def?eat(self):
????????pass
class?Person:
????def?__init__(self):
????????self.no_bananas()
????def?no_bananas(self):
????????self.bananas?=?[]
????def?add_banana(self,?banana):
????????self.bananas.append(banana)
????def?eat_bananas(self):
????????[banana.eat()?for?banana?in?self.bananas]
????????self.no_bananas()
def?main():
????graphviz?=?GraphvizOutput()
????graphviz.output_file?=?'basic.png'
????with?PyCallGraph(output=graphviz):
????????person?=?Person()
????????for?a?in?range(10):
????????????person.add_banana(Banana())
????????person.eat_bananas()
if?__name__?==?'__main__':
????main()
代码比较简单,定义了两个简单类,主要 pycallgraph 的核心代码在 main 函数中,在 with 代码块下,把我们定义的代码执行一遍即可
运行上面的代码,会在当前目录下生成 basic.png 图片文件

从生成的图片可以非常清晰的看出整个代码的运行过程,从 main 代码块到各个类的初始化,可以说一目了然。
我们再来一个复杂一点的例子:
import?re
from?pycallgraph?import?PyCallGraph
from?pycallgraph?import?Config
from?pycallgraph.output?import?GraphvizOutput
def?main():
????graphviz?=?GraphvizOutput()
????graphviz.output_file?=?'regexp.png'
????config?=?Config(include_stdlib=True)
????with?PyCallGraph(output=graphviz,?config=config):
????????reo?=?compile()
????????match(reo)
def?compile():
????return?re.compile('^[abetors]*$')
def?match(reo):
????[reo.match(a)?for?a?in?words()]
def?words():
????return?[
????????'abbreviation',
????????'abbreviations',
????????'abettor',
????????'abettors',
????????'abilities',
????????'ability',
????????'abrasion',
????????'abrasions',
????????'abrasive',
????????'abrasives',
????]
if?__name__?==?'__main__':
????main()
代码同样不负责,不过在编译器内部是调用了 re 正则的,我们来看看最终生成的图片:


分享
点收藏
点点赞
点在看
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 习近平将发表二〇二六年新年贺词 7904141
- 2 2026年国补政策来了 7808738
- 3 东部战区:开火!开火!全部命中! 7712893
- 4 2026年这些民生政策将惠及百姓 7616985
- 5 小学食堂米线过期2.5小时被罚5万 7519709
- 6 解放军喊话驱离台军 原声曝光 7428214
- 7 为博流量直播踩烈士陵墓?绝不姑息 7327605
- 8 每月最高800元!多地发放养老消费券 7238391
- 9 数字人民币升级 1月1日起将计付利息 7141831
- 10 2026年1月1日起 一批新规将施行 7040675







![我不要吃软糖 喜欢的单图[兔子]七言好会拍](https://imgs.knowsafe.com:8087/img/aideep/2022/1/9/29051a93246942dcd6e508fdc795881e.jpg?w=250)




AI100
