Python自动绘制UML类图、函数调用图(Call Graph)

文章目录

    • 1. 引言
    • 2. 绘制UML类图
      • 2.1 安装graphviz
      • 2.2 安装pyreverse
      • 2.3 绘制UML类图
    • 3. 绘制函数调用图
      • 3.1 安装graphviz
      • 3.2 安装pycallgraph
      • 3.3 使用示例
        • 第一种:从命令行调用
        • 第二种:从API调用
    • 小结

1. 引言

在设计软件、分析代码时,我们常常会借助UML以及函数调用图,来帮自己梳理思路。

尤其是遇到bug时,借助这些可视化手段,也可以帮你在调试过程中发现逻辑错误。

本文主要介绍以下两个方法:

  • 借助graphviz+pyreverse,自动提取python代码的UML类图和包依赖关系。

  • 借助graphviz+pycallgraph,自动提取python代码的动态调用流程图

2. 绘制UML类图

2.1 安装graphviz

Graphviz 是一个开源图形可视化软件。

Graphviz 以简单的文本语言对图形进行描述,并以多种有用的格式制作图表,例如用于网页的图像和 SVG,用于包含在 PDF 或其他文档中的 Postscript;或显示在交互式图形浏览器中。

步骤①:从官网下载graphviz软件

官网下载:http://www.graphviz.org/download/

下载exe安装包,完成graphviz软件安装,并找到bin路径。

步骤②:设置环境变量

在这里插入图片描述
步骤③:安装对应python库

$ conda install python-graphviz

2.2 安装pyreverse

pyreverse是一组用于对 Python 代码进行逆向工程的实用程序。

可以分析Python代码并提取 UML 类图和包依赖关系1

  • 类属性,及其类型
  • 类方法
  • 类之间的继承链接
  • 类之间的关联链接
  • 异常和接口的表示

Pyreverse 现在已集成到 pylint 中:http://pypi.python.org/pypi/pylint/

安装pylint

$ pip install pylint

注意:pip install pyreverse时,会发现已经找不到这个库了:ERROR: Could not find a version that satisfies the requirement pyreverse,不过pylint中已经包含了pyreverse,所以直接安装pylint即可。

2.3 绘制UML类图

UML类图常用于面向对象的建模中,UML类图的每个方框是一个对象类,每个框从上到下分为三部分,第一部分是对象类名称,第二部分是类的属性,第三部分是类的函数。

在命令行输入语句,生成package的UML图:

$ pyreverse -o png -p Pyreverse pylint/pyreverse/
[...]
creating diagram packages_Pyreverse.png
creating diagram classes_Pyreverse.png
  • -o :设置保存图像的格式,如png
  • -p Name: 输出图形以packages_Name.png为名称保存

在这里插入图片描述

3. 绘制函数调用图

函数调用图(Call Graph)是一个控制流程图,用于表示程序中各个单元之间的调用关系。每个节点之间的边缘表示调用过程。循环曲线表示递归过程调用。2

绘制Call Graph的常用工具有:pycallgraph、pyan(静态调用图)、gprof2dot 、code2flow等。本文主要介绍pycallgraph的用法。

pycallgraph是一个python模块,可以对python代码进行动态调用图分析3。包括模块之间的调用流程、函数调用次数及耗时等。

在这里插入图片描述

3.1 安装graphviz

同2.1节。

步骤①:从官网下载graphviz软件

官网下载:http://www.graphviz.org/download/

下载exe安装包,完成graphviz软件安装,并找到bin路径。

步骤②:设置环境变量

在这里插入图片描述
步骤③:安装对应python库

$ pip install graphviz

3.2 安装pycallgraph

安装pycallgraph:

$ pip install pycallgraph

3.3 使用示例

第一种:从命令行调用

$ pycallgraph graphviz -- ./mypythonscript.py

第二种:从API调用

最简单的例子,直接在要分析的函数调用前,加上with PyCallGraph(output=GraphvizOutput()):

from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutputwith PyCallGraph(output=GraphvizOutput()):# 调用你要分析的函数code_to_profile()

如果需要指定调用图中包含(include)哪些函数、排除(exclude)哪些函数,就要用到GlobbingFilter(include=[....])GlobbingFilter(exclude=[....]),例如这样4

from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
from pycallgraph import Config
from pycallgraph import GlobbingFilterdef main():# TODO: 调用各种类、函数returnif __name__ == "__main__":config = Config()# 调用图中包括(include)哪些函数# 用moduleName.*表示,包含某个模块内的所有函数config.trace_filter = GlobbingFilter(include=['main','app.*','widgets.list_widget.*','utils.RegionInfo.*'])# 调用图中不包括(exclude)哪些函数# config.trace_filter = GlobbingFilter(exclude=[#     'moduleA.*',#     'moduleB.*',#     '*.funcB'# ])graphviz = GraphvizOutput()graphviz.output_file = 'graph.png'with PyCallGraph(output=graphviz, config=config):main()

程序正常运行完之后,就会在当前路径生成graph.png文件。

越是复杂的程序,生成的调用图就会越大,注意选取你最关注的函数进行可视化。

在这里插入图片描述

其他高级用法可以参考:

官方文档:https://pycallgraph.readthedocs.io/en/master/

小结

本文介绍了两个python代码可视化工具:

  • 借助graphviz+pyreverse,可以自动提取python代码的UML类图

  • 借助graphviz+pycallgraph,可以自动提取python代码的动态调用图

如果对你有帮助的话,欢迎一键三连支持下博主。


  1. https://www.logilab.org/blogentry/6883 ↩︎

  2. https://encyclopedia.thefreedictionary.com/Call+graph ↩︎

  3. https://zhuanlan.zhihu.com/p/108481835 ↩︎

  4. https://blog.csdn.net/qq_37177765/article/details/95886071 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39656.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

房价预测2

学习: https://blog.csdn.net/u012063773/article/details/79349256 https://www.cnblogs.com/massquantity/p/8640991.html https://zhuanlan.zhihu.com/p/39429689 详解stacking过程 之前在房价预测1中对一些异常值进行了drop处理 后来在分割train和test的时候…

深圳二手房房价分析及预测

分析目标: 通过处理后的房价数据,筛选对房价有显著影响的特征变量。确定特征变量,建立深圳房价预测模型并对假设情景进行模拟 数据预处理 import pandas as pd import os file_path"D:\Python数据分析与挖掘实战\深圳二手房价分析\…

波士顿房价预测

目录 前言一、波士顿房价预测实战1-1、数据集介绍&数据集导入&分割数据集1-2、数据标准化1-3、构建网络1-4、K折交叉验证&取出所有的训练损失、训练平均绝对误差、验证损失、验证平均绝对误差1-5、计算平均mae&绘制验证mae分数&绘制验证loss分数1-6、找到最…

房价多特征预测

2019.11.18 首先非常感谢这位作者,写的很棒!你们就不要看我的啦,看他的⬇️⬇️ 学习来自 https://blog.csdn.net/sinat_29957455/article/details/79255675 下面的内容为自己学习笔记: 学习Kaggle~ing 这次给出的特征有点儿多啊…

北京房价预测图说

前言 曾听人说过,中国经济是房地产市场,美国经济是股票市场。中国房地产市场超过400万亿,房地产总值是美国、欧盟、日本总和,但是股市才50万亿,不到美欧日的十分之一。可见房地产对于中国来说地位尤其明显&#xff01…

苹果App Store商店中国区如何改为美国区

苹果App Store商店中国区如何改为美国区 Hello大家好!苹果外区id是每个苹果手机必不可少的啦!不是国外有多好而是国内的大部分软件都有限制,一开始我百度了一下内容太乱太杂了真的都是“bullshit”,下面直接上教程。 第一首先要一个国内的苹…

二手平台淘的明星同款穿搭?上95分看看

作为一个喜欢穿搭的潮流人士,我拥有许多明星同款,但拥有的越多,我的钱包就越扁。 但尽管是在这样的情况下,我依然不能放弃给它们(指衣服鞋子)一个家,所以我知道了95分,认识了95分&a…

《VogueMe》手写问答新鲜出炉!这字体很李易峰!

爱豆新闻讯 昨日晚间,《VogueMe》官博送上端午小福利――我们小哥哥的手写问答新鲜出炉啦!蜜蜂们纷纷表示,瞧这字体一看就知道是出自我方木哥~ 最后,期待我哥在电影《心理罪》里的表现,小编表示已经迫不及待想见方木了…

pythonif语句怎么换行输入_李沁和李易峰演的电视剧叫什么名字

第一现纠在出掌握证据录音录像历印病常会存复纷后、封时间,的维权意强患方来越由于识越。 每月李女养费0元付抚士支,女由达成高先协议最终养:长双方生抚。他又女儿带着悄悄亲子做了鉴定,为了打消的疑自己虑,对恩高先妻…

有时间BB,不如想想怎么让别人闭嘴吧

1. 经过上次「SKR!虎扑66万JRS大战3300万吴亦凡护卫队,别逼我拿Python」一事,我发现观众里有很多JRs,「这就是灌篮」一定不陌生。 我不是做广告,所以对该节目的评论暂时不讨论,今天要说的是球场外的另一件事…

看了这篇文,开始佩服蔡徐坤了

文/北妈 阅读本文需要 2.6分钟 一 每天群里还在说cxk这个关键字,显然现在cxk的人气和梗,已经是全民级别的了。 看到cxk三个字就忍不住很欢乐,并不是黑他, 如果读者里有坤粉,千万不要误会,我们并没有真心要…

致敬云南滑翔机

今天晚上,看了期待已久的篮球节目, 我要打篮球,11点左右,感觉特别困,已经快睡着了,准备关掉电视的时候看到林书豪的图片,林书豪头上有一个标题《我要打篮球》,这个不就是《这&#x…

陈伟霆,赵丽颖,李易峰,青云志,分析。

作者:韩梦飞沙 QQ:313134555 陈伟霆(William Chan),1985年11月21日出生于中国香港,华语影视男演员、主持人、歌手 2003年因参加全球华人新秀香港区选拔赛而进入演艺圈[1-2] ;2006年成为Sun Boy’z组合一员…

pyhton爬取:爬取爱豆(李易峰)微博评论,看看爱豆粉丝的关注点在哪(附源码)

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本片文章来自腾讯云, 作者:孤独的明月 今日目标:微博 以李易峰的微博为例: https://weibo.com/liyifen…

杨幂 刘恺威公布离婚 目测李易峰将再一次卷入风暴中心!

杨幂 刘恺威终于确认离婚了。嘉行传媒发布消息,宣称杨幂 刘恺威协议离婚。这几年真真假假关于两人离婚的消息,算是每个月都有冒泡。实在是听的耳朵都起茧了。 其实不关心他们两个,可是李易峰却是喜欢的。2014年,杨幂和李易峰主演的…

pyhton爬取爱豆(李易峰)微博评论(附源码)

今日目标:微博 以李易峰的微博为例: https://weibo.com/liyifeng2007?is_all1然后进入评论页面,进入XHR查找真是地址: https://weibo.com/aj/v6/comment/big?ajwvr6&id4353796790279702&fromsingleWeiBo很明显&#xff…

猎聘品牌升级李易峰为代言人 官网启用双拼域名liepin.com

2020年受疫情影响,“金三银四求职季”不如往年风光,如果说起求职软件,大家首先想到的会是谁? 1月18日消息,猎聘开启品牌升级序幕,发布了全新品牌logo,同时公布了当红明星李易峰成为新的品牌代言人。作为新…

pyhton爬取爱豆(李易峰)微博评论

今日目标:微博,以李易峰的微博为例: https://weibo.com/liyifeng2007?is_all1然后进入评论页面,进入XHR查找真是地址: https://weibo.com/aj/v6/comment/big?ajwvr6&id4353796790279702&fromsingleWeiBo很…

李易峰个人简历模板

李易峰 性别:男出生年份:1987QQ:123456民族:汉族婚姻状况:未婚身高:181 cm体重:60 kg演艺经历 2007年李易峰参加《加油!好男儿》获得总决赛第八名以及最具亲和力奖,从而进…

Linux 服务器新建子账户

Linux 服务器新建子账户 以下内容部分为chatgpt的回答 新建子账户 在Linux服务器中,可以使用以下步骤来创建新的用户账户: 打开终端,并使用root用户或拥有sudo权限的用户登录。使用以下命令创建新的用户账户。请将**newuser**替换为您想要…