[Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph

文章目录

  • [Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph
    • 问题描述
    • 解决方案
    • 安装graphviz函数库
    • 安装pycallgraph函数库
      • 关于安装函数库,我想多说的两点。
    • 安装graphviz-2.38软件
    • 核心代码

问题描述

不知道大家有没有遇到这样的问题:尤其是代码很长,或者整体逻辑不太好的时候,代码在脑袋里就是一团乱麻,从而给代码阅读和调试,以及移植等操作,增加巨大的困难。

这时候我就想,如果能把代码的结构可视化一下就好了。


解决方案

在这个问题下,绘制Python代码的函数调用关系就成了一个自然而然的解决方案。

先上结果图:


安装graphviz函数库

安装方法见:graphviz官方文档。

安装命令是:

pip install graphviz

安装pycallgraph函数库

安装方式见官网:pycallgraph官方文档

安装命令是:

pip install pycallgraph

关于安装函数库,我想多说的两点。

  1. 多看官方文档,少看各种博客。

    作为跟程序打交道的,以后看官方文档的时候多了去了。现在不锻炼着,以后就干着急吧。

    而且现在的一些博客,大部分来说,写的太粗糙太粗糙。放出来的都是别人自己嚼烂的,对不对,全不全,都要打个问号。

    很多时候我看到百度搜索前几的博客,其内容水平真是让我大跌眼镜,满头问号。

    相反的,官方文档及其GitHub写的要更为精简和规范。

  2. 注意区分原生的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相关推荐

  1. python中控制代码块逻辑关系_一、Python基础知识

    1.1 Python简介 (1)解释型语言 解释型语言在运行程序的时候才逐行翻译.运行. ①优点: 有良好的平台兼容性,在任何环境中都可以运行(安装了解释器)灵活,修改代码的时候直接修改就可以,可以快 ...

  2. python绘制柱状图代码_python绘制双柱形图代码实例

    图表是比干巴巴的表格更直观的表达,简洁.有力.工作中经常遇到的场景是,有一些数值需要定时的监控,比如服务器的连接数.活跃用户数.点击某个按钮的人数,并且通过邮件或者网页展示出来.当我们想关注比数值本身 ...

  3. Python绘制表白代码,又是一个表白神器

    前言 嗨呀,又是我,又给你们带来了表白的代码 之前发了那些 照片里面加文字的-还有烟花-还有跳动爱心-emm你们也可以去看看哦 今天带来的这个,也是很不错哦 只不过它出来的有些慢,我这里先给你们看看这 ...

  4. python绘制同心圆代码_使用Python+turtle绘制同心圆

    问题描述:数学定义上是指:同一平面上同一圆心而半径不同的圆.简单来说就是:圆心相同半径不同的圆,如果几个圆的圆心是同一点,那么这几个圆就叫做同心圆. 本文使用turtle绘制一个类似"箭靶& ...

  5. 用Python绘制表白代码

    文章目录 一.绘制成品 二.绘制代码 1.导入库 2.选择背景音乐 3.绘制心的外轮廓 4.填充心并写告白信 5.画心动线 一.绘制成品 二.绘制代码 实现本文效果的整体思路是:加载库-选择背景音乐- ...

  6. python绘制扇形代码_动态绘制扇形实例

    /**** * DrawSectorTest * 动态绘制扇形实例(拖拽绘制) ****/ package fengzi.drawing { import flash.display.Shape; i ...

  7. python蟒蛇代码解析_Python绘制蟒蛇代码理解

    Python 绘制蟒蛇代码理解 # pythondraw.py import turtle #import 是保留字, 引入一个会图库, 名字叫做 turtle #import< 库名 > ...

  8. python必备基础代码-python基础知识和练习代码

    1.编译:将高级语言源代码转换成目标代码(机器语言),程序便可运行. ​ 好处:目标代码执行速度更快:目标代码在相同操作系统上使用灵活. 2.解释:将高级语言源代码逐条转换成目标代码同时逐条执行,每次 ...

  9. Python绘制中国五星红旗及美国星条旗源代码

    本文含中国五星红旗.美国星条旗.日本国旗.瑞士国旗 五星红旗 运行效果: 五星红旗是中华人民共和国的国旗,它是由四颗小的黄五角星环绕一颗大的黄五角星组成的,底色为红色,实现代码如下: import t ...

最新文章

  1. learn Linux sed command
  2. JS中URL编码解码
  3. MOSS2010 标准版与企业版的区别
  4. (学习日记)关于a1,a2,a3,...,an共n个元素依次入栈其可能出栈的排列数的计算(catalan数)...
  5. 企业选择 多云管理平台 六大注意事项
  6. 解决Coldfusion连接MySQL数据库的问题
  7. Ubuntu15.10 安装JDK,配置环境变量, 解决无法登录的问题
  8. Angr安装与使用之使用篇(五)
  9. 弃用 Notepad++ 还有更牛逼的选择
  10. 膜拜高手!Python竟然开发命令行版网易云音乐!
  11. Newkirk effect and Morton effect
  12. 用VB创建一个对象数组
  13. 学习Linux/Unix这么久了,你真的知道什么是终端吗?
  14. python图片转素描风
  15. 3D动作手游的辅助瞄准算法(一)
  16. Linux-USB学习 -- USB枚举过程
  17. CreateEvent和SetEvent函数
  18. JavaSE_kuang
  19. 学完C语言,学什么, 怎么学,之后学什么
  20. Linux安全篇-iptables

热门文章

  1. python编程100例-python100例,python经典例题
  2. python爬虫菜鸟教程-Python爬虫学习100练001
  3. 科大讯飞免切换语音输入,留住更美乡音!
  4. 目前效果最好、应用较广且比较成熟的语音识别模型是什么?
  5. 输入指定答案提示正确C语言,大学C语言课件及复习答案输入输出.ppt
  6. 两个水平排列的div顶部对齐~详细
  7. 移动web-使一个盒子水平垂直居中的六种方法
  8. echart保存图片的两种实现方式
  9. 【动态规划】完全背包问题:构成m的最少个数
  10. vb.net中递归退到最外层_面试题被问到再也不慌,深究JavaScript中的深拷贝与浅拷贝...