Python - 使用pycallgraph生成函数关系图
1- pycallgraph简介
2- 安装pycallgraph
$ pip3 install pycallgraph --proxy=10.144.1.10:8080
Collecting pycallgraph
Using cached https://files.pythonhosted.org/packages/ca/2e/fafa56316bc2c5fbfbda898f964137c8b5ef33a876cb1f35a54ff6afbd60/pycallgraph-1.0.1.tar.gz
Installing collected packages: pycallgraph
Running setup.py install for pycallgraph ... done
Successfully installed pycallgraph-1.0.1
- 下载:https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi
- 设置环境变量:Advanced System Settings--》Advanced (tab) ---》Environmental Variables then edit the PATH variable.---》"C:\Program Files (x86)\Graphviz2.38\bin"
3- 运行pycallgraph
3-1 直接在命令行方式运行
$ pycallgraph graphviz -- ./test.py
3-2 使用API在命令行运行
$ cat TempTest.py
#! python3
# -*- coding: utf-8 -*- def testStr(key):
print("testStr is :", key) $ cat CallGraphTest.py
#! python3
# -*- coding: utf-8 -*-
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput import TempTest def testNum(key):
TempTest.testStr(key)
print("testNum is :", key) g = GraphvizOutput(output_file=r'./trace.png')
with PyCallGraph(output=g):
TempTest.testStr("111")
testNum(222) $ $ py -3 CallGraphTest.py
testStr is : 111
testStr is : 222
testNum is : 222 $ ls -l
total 14
drwxr-xr-x 1 guowli 1049089 0 May 23 16:07 __pycache__/
-rwxr-xr-x 1 guowli 1049089 350 May 23 15:56 CallGraphTest.py*
-rwxr-xr-x 1 guowli 1049089 92 May 23 15:59 TempTest.py*
-rw-r--r-- 1 guowli 1049089 9141 May 23 16:07 trace.png $
生成指定名称的函数关系图trace.png

示例-2
#! python3
# -*- coding: utf-8 -*-
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
from pycallgraph import Config
from pycallgraph import GlobbingFilter 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'
config = Config()
config.max_depth = 5 # 控制最大追踪深度 with PyCallGraph(output=graphviz, config=config):
person = Person()
for a in range(10):
person.add_banana(Banana())
person.eat_bananas() if __name__ == '__main__':
main()
生成函数关系图

4- 在Pycharm运行objgraph
'The command "{}" is required to be in your path.'.format(cmd))
pycallgraph.exceptions.PyCallGraphException: The command "dot" is required to be in your
path.
- Name: PATH
- Value: C:\Program Files (x86)\Graphviz2.38\bin
5- 参考信息
- pycallgraph 追踪Python函数内部调用:http://www.cnblogs.com/xiaomm/p/6325940.html
- 利用graphviz软件和pycallgraph库自动生成Python代码函数调用关系图:https://blog.csdn.net/qq_36408085/article/details/82952846
Python - 使用pycallgraph生成函数关系图的更多相关文章
- Python - 使用objgraph生成对象引用关系图
1- objgraph简介 HomePage:https://mg.pov.lt/objgraph/ PyPI:https://pypi.org/project/objgraph/ 一般用于分析pyt ...
- python xlwt模块生成excel文件并写入数据 xlrd读取数据
python中一般使用 xlwt (excel write)来生成Excel文件(可以控制单元格格式),用 xlrd 来读取Excel文件,用xlrd读取excel是不能对其进行操作的. 1.xlrd ...
- tensorflow 升级到1.9-rc0,生成静态图frozen graph.pb本地测试正常, 在其他版本(eg1.4版本)或者android下运行出错NodeDef mentions attr 'dilations' not in Op<name=Conv2D; signature=input:T, filter:T -> output:T; attr=T:type,allowed=[DT_
这时节点定义找不到NodeDef attr 'dilations' not in,说明执行版本的NodeDef不在节点定义上,两个不一致,分别是执行inference的代码和生成静态图节点不一致(当然 ...
- Locust 测试结果通过Matplotlib生成趋势图
目的: 相信大家对于使用Loadrunner测试后的结果分析详细程度还是有比较深刻的感受的,每个请求,每个事务点等都会有各自的趋势指标,在同一张图标中展示.如下图: 而Locust自身提供的chart ...
- 使用Python第三方库生成二维码
本文主要介绍两个可用于生成二维码的Python第三方库:MyQR和qrcode. MyQR的使用: 安装: pip install MyQR 导入: from MyQR import myqr imp ...
- python根据文本生成词云图
python根据文本生成词云图 效果 代码 from wordcloud import WordCloud import codecs import jieba #import jieba.analy ...
- Python用MyQR生成自定义个性二维码
MyQR是一个能够生成自定义二维码的python第三方库,根据需要能够生成普通二维码.带背景图片的艺术二维码.动态二维码. 1.MyQR安装 安装非常简单,直接用pip install MyQR,需要 ...
- 利用python画出SJF调度图
最先发布在csdn.本人原创. https://blog.csdn.net/weixin_43906799/article/details/105510046 SJF算法: 最短作业优先(SJF)调度 ...
- 使用Python代码制作GIF动态图
使用Python PIL.Image 制作GIF图片: import PIL.Image 相关模块 img = Image.open(img_name) ...
随机推荐
- BZOJ1058或洛谷1110 [ZJOI2007]报表统计
BZOJ原题链接 洛谷原题链接 STL 本题可以直接使用\(\mathtt{STL\ multiset}\)水过去. 因为本题插入数的操作实际上就是将原数列分为\(n\)段,在每一段的末尾插入数,所以 ...
- HTTP之请求消息Request
客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line).请求头部(header).空行和请求数据四个部分组成. 请求行以一个方法符号开头,以空格分开,后面跟着请 ...
- 4-1 requests库的安装
1. 一切安装从简就行了直接打开cmd命令窗口输入 pip install requests 把复杂的问题简单化,我这个已经安装好了.会提示已经安装. 2.打开cmd 输入python 这个会提示 ...
- sql语句性能优化
需要的准备知识 1最左前缀匹配 mysql会一直向右匹配直到遇到范围查询(>.<.between.like)就停止匹配, 对于where条件 a = 1 and b> 2 and c ...
- python模块:csv
""" csv.py - read/write/investigate CSV files """ import re from _csv ...
- 解决jenkins shell执行sonar-scanner提示命令存在的问题
通过jenkins的以下三个方式去执行sonar-scanner,抛如下错误. Send files or execute commands over SSH before the build sta ...
- update_or_create()
update_or_create(默认值=无,** kwargs)¶ 使用给定更新对象的便捷方法,kwargs必要时创建新对象.这defaults是用于更新对象的(字段,值)对的字典.值中的值defa ...
- C语言中结构体(struct)的几种初始化方法
转自https://www.jb51.net/article/91456.htm 本文给大家总结的struct数据有3种初始化方法 1.顺序 2.C风格的乱序 3.C++风格的乱序 下面通过示 ...
- REdis命令处理流程处理分析
分析版本:REdis-5.0.4. REdis命令处理流程可分解成三个独立的流程(不包括复制和持久化): 1) 接受连接请求流程: 2) 接收请求数据和处理请求流程,在这个过程并不会发送处理结果给Cl ...
- APIView源码简单分析图
APIView源码简单分析 !声明:下面这个dispatch分发方法不在是父类View里的dispatch了,APIView重新封装了这个dispatch.(整个核心就是initialize_requ ...