[Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph
[Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph
文章目录
- [Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph
- 问题描述
- 解决方案
- 安装graphviz函数库
- 安装pycallgraph函数库
- 关于安装函数库,我想多说的两点。
- 安装graphviz-2.38软件
- 核心代码
问题描述
不知道大家有没有遇到这样的问题:尤其是代码很长,或者整体逻辑不太好的时候,代码在脑袋里就是一团乱麻,从而给代码阅读和调试,以及移植等操作,增加巨大的困难。
这时候我就想,如果能把代码的结构可视化一下就好了。
解决方案
在这个问题下,绘制Python代码的函数调用关系就成了一个自然而然的解决方案。
先上结果图:
安装graphviz函数库
安装方法见:graphviz官方文档。
安装命令是:
pip install graphviz
安装pycallgraph函数库
安装方式见官网:pycallgraph官方文档
安装命令是:
pip install pycallgraph
关于安装函数库,我想多说的两点。
多看官方文档,少看各种博客。
作为跟程序打交道的,以后看官方文档的时候多了去了。现在不锻炼着,以后就干着急吧。
而且现在的一些博客,大部分来说,写的太粗糙太粗糙。放出来的都是别人自己嚼烂的,对不对,全不全,都要打个问号。
很多时候我看到百度搜索前几的博客,其内容水平真是让我大跌眼镜,满头问号。
相反的,官方文档及其GitHub写的要更为精简和规范。
注意区分原生的Python环境和Anaconda下的环境。
直接的结果就是,打开命令行直接
pip install XXX
,是不能在使用Anaconda下的Pycharm中使用的。具体的原因和做法,参见之前写的另一个博客:[python+pip] 使用pip将函数库安装到Python环境或Anaconda环境
安装graphviz-2.38软件
pycallgraph函数库在使用的时候,要使用dot
的功能。而要dot
功能的话,就要下载 graphviz-2.38。
否则会出现以下报错信息:
'The command "{}" is required to be in your path.'.format(cmd))
pycallgraph.exceptions.PyCallGraphException: The command "dot" is required to be in your path.
关于这个报错的详细解释,可以看一下stackoverflow上的两个回答:
- Python PyCallGraphException
- pycallgraph with pycharm does not work
下载的链接放到这:Graphviz。由于是境外下载,速度会比较慢。
我自己的下好的压缩包上传到CSDN了,免费的:graphviz-2.38安装程序(免费)
安装完之后还要将其路径增加到环境变量中,一般是C:\Program Files (x86)\Graphviz2.38\bin
。然后就大功告成了!
怎么修改环境变量,见:设置Python环境变量-Windows10
核心代码
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
from pycallgraph import Config
from pycallgraph import GlobbingFilterdef main():graphviz = GraphvizOutput()graphviz.output_file = 'basic.png'with PyCallGraph(output=graphviz):k_fold_cross_validation(10, x, label) # k=10,十折交叉验证if __name__ == '__main__':main()
或者指定只绘制相应函数的操作:
def main():# 主函数代码。if __name__ == "__main__":config = Config()# 关系图中include的函数名。# 如果是某一类的函数,例如类gobang,则可以直接写'gobang.*',表示以gobang.开头的所有函数。(利用正则表达式)。config.trace_filter = GlobbingFilter(include=['main','train',])该段作用是关系图中exclude的函数。(正则表达式规则)config.trace_filter = GlobbingFilter(exclude=['pycallgraph.*',])graphviz = GraphvizOutput()graphviz.output_file = 'basic.png'with PyCallGraph(output=graphviz, config=config):main()
[Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph相关推荐
- python中控制代码块逻辑关系_一、Python基础知识
1.1 Python简介 (1)解释型语言 解释型语言在运行程序的时候才逐行翻译.运行. ①优点: 有良好的平台兼容性,在任何环境中都可以运行(安装了解释器)灵活,修改代码的时候直接修改就可以,可以快 ...
- python绘制柱状图代码_python绘制双柱形图代码实例
图表是比干巴巴的表格更直观的表达,简洁.有力.工作中经常遇到的场景是,有一些数值需要定时的监控,比如服务器的连接数.活跃用户数.点击某个按钮的人数,并且通过邮件或者网页展示出来.当我们想关注比数值本身 ...
- Python绘制表白代码,又是一个表白神器
前言 嗨呀,又是我,又给你们带来了表白的代码 之前发了那些 照片里面加文字的-还有烟花-还有跳动爱心-emm你们也可以去看看哦 今天带来的这个,也是很不错哦 只不过它出来的有些慢,我这里先给你们看看这 ...
- python绘制同心圆代码_使用Python+turtle绘制同心圆
问题描述:数学定义上是指:同一平面上同一圆心而半径不同的圆.简单来说就是:圆心相同半径不同的圆,如果几个圆的圆心是同一点,那么这几个圆就叫做同心圆. 本文使用turtle绘制一个类似"箭靶& ...
- 用Python绘制表白代码
文章目录 一.绘制成品 二.绘制代码 1.导入库 2.选择背景音乐 3.绘制心的外轮廓 4.填充心并写告白信 5.画心动线 一.绘制成品 二.绘制代码 实现本文效果的整体思路是:加载库-选择背景音乐- ...
- python绘制扇形代码_动态绘制扇形实例
/**** * DrawSectorTest * 动态绘制扇形实例(拖拽绘制) ****/ package fengzi.drawing { import flash.display.Shape; i ...
- python蟒蛇代码解析_Python绘制蟒蛇代码理解
Python 绘制蟒蛇代码理解 # pythondraw.py import turtle #import 是保留字, 引入一个会图库, 名字叫做 turtle #import< 库名 > ...
- python必备基础代码-python基础知识和练习代码
1.编译:将高级语言源代码转换成目标代码(机器语言),程序便可运行. 好处:目标代码执行速度更快:目标代码在相同操作系统上使用灵活. 2.解释:将高级语言源代码逐条转换成目标代码同时逐条执行,每次 ...
- Python绘制中国五星红旗及美国星条旗源代码
本文含中国五星红旗.美国星条旗.日本国旗.瑞士国旗 五星红旗 运行效果: 五星红旗是中华人民共和国的国旗,它是由四颗小的黄五角星环绕一颗大的黄五角星组成的,底色为红色,实现代码如下: import t ...
最新文章
- learn Linux sed command
- JS中URL编码解码
- MOSS2010 标准版与企业版的区别
- (学习日记)关于a1,a2,a3,...,an共n个元素依次入栈其可能出栈的排列数的计算(catalan数)...
- 企业选择 多云管理平台 六大注意事项
- 解决Coldfusion连接MySQL数据库的问题
- Ubuntu15.10 安装JDK,配置环境变量, 解决无法登录的问题
- Angr安装与使用之使用篇(五)
- 弃用 Notepad++ 还有更牛逼的选择
- 膜拜高手!Python竟然开发命令行版网易云音乐!
- Newkirk effect and Morton effect
- 用VB创建一个对象数组
- 学习Linux/Unix这么久了,你真的知道什么是终端吗?
- python图片转素描风
- 3D动作手游的辅助瞄准算法(一)
- Linux-USB学习 -- USB枚举过程
- CreateEvent和SetEvent函数
- JavaSE_kuang
- 学完C语言,学什么, 怎么学,之后学什么
- Linux安全篇-iptables
热门文章
- python编程100例-python100例,python经典例题
- python爬虫菜鸟教程-Python爬虫学习100练001
- 科大讯飞免切换语音输入,留住更美乡音!
- 目前效果最好、应用较广且比较成熟的语音识别模型是什么?
- 输入指定答案提示正确C语言,大学C语言课件及复习答案输入输出.ppt
- 两个水平排列的div顶部对齐~详细
- 移动web-使一个盒子水平垂直居中的六种方法
- echart保存图片的两种实现方式
- 【动态规划】完全背包问题:构成m的最少个数
- vb.net中递归退到最外层_面试题被问到再也不慌,深究JavaScript中的深拷贝与浅拷贝...