【Python】利用graphviz和pycallgraph库自动生成Python函数调用关系图
一、下载并安装graphviz
因为这个模块依赖Graphviz2.38这个软件,这个贝尔实验室大牛为画图提供的一个命令行工具。
下载地址:https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi
安装(路径可任意选择)
配置环境变量,在Path
中添加graphviz
的bin
目录所在路径。
例如,我安装在F:\Program Files (x86)
那么就添加环境变量F:\Program Files (x86)\Graphviz2.38\bin
二、安装pycallgraph库
pip install pycallgraph
三、使用
注意:只有你的操作使用了某个函数,才能显示在流图中。用户没有调用的函数则不会出现在流图中。
(所以,使用的时候要考虑一下你此次调用的“测试覆盖率”,尽可能全面的调用到每一个函数)
生成的图片示例
代码示例 1:在普通python程序中使用
# -*- coding: utf-8 -*-from pycallgraph import Config
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
from werkzeug.datastructures import ImmutableMultiDictfrom app.main.views import do_all_copydef main():# do something...if __name__ == "__main__":config = Config()# 关系图中包括(include)哪些函数名。# 如果是某一类的函数,例如类gobang,则可以直接写'gobang.*',表示以gobang.开头的所有函数。(利用正则表达式)。# config.trace_filter = GlobbingFilter(include=[# 'draw_chessboard',# 'draw_chessman',# 'draw_chessboard_with_chessman',# 'choose_save',# 'choose_turn',# 'choose_mode',# 'choose_button',# 'save_chess',# 'load_chess',# 'play_chess',# 'pop_window',# 'tip',# 'get_score',# 'max_score',# 'win',# 'key_control'# ])# 该段作用是关系图中不包括(exclude)哪些函数。(正则表达式规则)# config.trace_filter = GlobbingFilter(exclude=[# 'pycallgraph.*',# '*.secret_function',# 'FileFinder.*',# 'ModuleLockManager.*',# 'SourceFilLoader.*'# ])graphviz = GraphvizOutput()graphviz.output_file = 'graph.png'with PyCallGraph(output=graphviz, config=config):main()
代码示例 2:在Flask中使用
如果你开发的是web应用,同样可以使用这个库。
你只需要在你希望监测的函数中,添加如下代码:
# 添加必要的import
from pycallgraph import Config
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput@main.route('/example_mapping/', methods=[ 'GET','POST'])
@login_required
def example_mapping():config = Config()graphviz = GraphvizOutput()graphviz.output_file = 'graph.png'with PyCallGraph(output=graphviz, config=config):# 这里写原有的函数功能# do something...return render_template('example_mapping.html', jsondata=json_last, timejson=timejson)
然后访问你的web服务页面,http://127.0.0.1:5000/example_mapping/
即可。经过测试,此过程可能会比以往更慢一些。
附:报错找不到dot
的解决方式:
遇到错误 pycallgraph.exceptions.PyCallGraphException: The command “dot” is required to be in your path.
解决方式
You need to find dot.exe
, which for me was in C:\Program Files (x86)\Graphviz2.38\bin
so I went to the following: control panel > system > advanced system settings > Environment Variables...
and then in the bottom box for System Variables, find Path
, select it and select edit, then select new and paste the path in. Now close and reopen cmd.exe
and see simple type in ‘dot
’ and hit enter. If there’s no error, the path was setup properly.
简单来说,就是你需要将C:\Program Files (x86)\Graphviz2.38\bin
添加到环境变量的Path
中,然后在cmd
里面尝试运行dot
这个命令,如果不报错,就可以正常使用了。
【Python】利用graphviz和pycallgraph库自动生成Python函数调用关系图相关推荐
- 如何自动生成表关联关系关系图 或 实体关系模型图------EER图
最近项目组让整理一个我们项目的表结构设计说明书,就是梳理每张表的字段.描述.是否为空.字段类型等,理论上完成上面的就可以交差了,但我觉得要是能将所有的表之间的关联关系图(EER)画出来就更好了,逼格一 ...
- python的api库_python 利用toapi库自动生成api
在学习做接口测试自动化的时候,我们往往会自己动手写一些简单的API,比如写一个简单的TODO API之类. 不过自己写API的时候经常需要造一些假数据,以及处理分页逻辑,开始的时候还觉得比较有意思,但 ...
- 利用CodeBERT,这个VS Code扩展可以自动生成Python文档字符串
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 该扩展利用可处理编程语言和自然语言的预训练模型 CodeBERT,实现 ...
- vscode python 自动补全_利用CodeBERT,这个VS Code扩展可以自动生成Python文档字符串...
机器之心报道 编辑:魔王 该扩展利用可处理编程语言和自然语言的预训练模型 CodeBERT,实现快速生成 Python 文档字符串的功能. Visual Studio Code(简称 VS Code) ...
- 用Python调用Graphviz生成复杂股权关系图
一.为啥用Graphviz? 最近接触一个项目需要根据数据自动生成持股关系较为复杂的股权关系图,之所以说复杂主要体现在股权层级多,还有一些特殊持股方式,比如一个子公司在集团内有多家公司持股,还有相互持 ...
- 这个VS Code扩展可以自动生成Python文档字符串
机器之心报道 编辑:魔王 该扩展利用可处理编程语言和自然语言的预训练模型 CodeBERT,实现快速生成 Python 文档字符串的功能. Visual Studio Code(简称 VS Code) ...
- Sphinx——自动生成Python文档
Sphinx是一个可自动生成python项目api的工具,使用起来也比较简单,只需要在项目上进行简单的配置,即可生成项目的api文档 简介 Sphinx是Python文档生成器,它基于reStruct ...
- 画【Python折线图】的一百个学习报告(三、自动生成单一数据折线图)
画[Python折线图]的一百个学习报告(三.自动生成单一数据折线图) 目录 画[Python折线图]的一百个学习报告(三.自动生成单一数据折线图) 前言 学习环境 探究目标 分析过程 实践过程 成果 ...
- Python自动生成代码 - 通过tkinter图形化操作生成代码框架
Python自动生成代码 - 通过tkinter图形化操作生成代码框架 背景 脚本代码 Demo_CodeGenerator.py display.py FileHandler.py: 脚本运行结果: ...
最新文章
- Ado.net 创建DataTable
- python面向对象编程(封装与继承)
- Go_笔试题记录-不熟悉的
- ubuntu14.04下python2.7推荐系统Crab搭建
- python之word2vec实战学习
- Atitit Loading 动画效果
- C#编写ActiveX控件
- linux信号量配合共享内存应用分析(详解)
- 白天工作效率低,晚上效率高怎么调整过来?
- 我在印尼工作的日子-基本环境
- 静态库、动态库及导入库
- 手机计算机怎么输入汉字,手机word怎么插入形状并输入文字?
- 有道云生成html,从有道云笔记迁移到为知笔记
- Android Studio 连接雷电模拟器
- Android USB系统(一)
- 一文看懂开源许可证丨开源知识科普
- 墨者学院01 SQL手工注入漏洞测试(MySQL数据库)
- 盘点 深度学习妖怪 之 激活函数妖
- 重磅!两万字长文总结,梳理 Java 入门进阶哪些事(推荐收藏)
- MySql索引查询优化 千万级数据普通查询和建立索引后数据查询耗时对比