Python - 使用pycallgraph生成函数关系图
Python 函数 生成 关系 使用
2023-09-14 08:59:09 时间
1- pycallgraph简介
可用于创建python函数关系图,依赖于dot命令,需要先安装 graphviz;
2- 安装pycallgraph
安装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
安装graphviz
graphviz(http://www.graphviz.org/)是一个图形可视化软件(Graph Visualization Software),使用dot文件生成关系图;
- 下载: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
默认将生成一个名为pycallgraph.png的函数关图
3-2 使用API在命令行运行
示例-1
$ 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
需要在Pycharm中设置Graphviz环境变量,否则可能报错:
'The command "{}" is required to be in your path.'.format(cmd)) pycallgraph.exceptions.PyCallGraphException: The command "dot" is required to be in your path.
设置Pycharm环境变量步骤:
Run --》Edit Configurations... --》Default --》Python --》Environment field group: Environment variables --》 ... --》+ --》
- 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 endswith() 函数
- 【python】进程与线程
- python使用requests发送text/xml报文数据
- Python - 使用pycallgraph生成函数关系图
- python:pip升级pip本身和setuptools(Python 3.7.15)
- Python print函数及format()格式化输出详解
- Python函数详解(三)——函数的参数传递进阶
- [LINK]Python服务器开发一:python基础
- Python编程语言学习:python编程语言中重要函数讲解之map函数等简介、使用方法之详细攻略
- Python编程语言学习:for循环中常用方法经验技巧(利用enumerate函数对列表实现自带索引等)之详细攻略
- Python语言学习之常见语句命令那些事:python和常见语句命令(条件语句、pass语句)使用方法之详细攻略
- 100天精通Python(数据分析篇)——第63天:Pandas使用自定义函数案例(pipe、apply、map、applymap、agg)
- 已解决2.Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and wi
- 10 大经典排序算法 Python 版实现(附动图演示)
- Python 最频繁使用的4个函数:lambda、 map、filter 和 reduce
- Python实现直方图梯度提升回归模型(HistGradientBoostingRegressor算法)并基于网格搜索进行优化同时绘制PDP依赖图项目实战
- 【项目实战】Python基于孤立森林算法(IsolationForest)实现数据异常值检测项目实战
- 【华为机试真题 Python实现】篮球比赛【2022 Q1 Q2 | 200分】
- 【华为OD机试 2023】 计算快递主站点(C++ Java JavaScript Python)
- 【Python实验】函数
- Python 如何判断一个函数是generator函数?
- python 元祖 tuple 遍历
- Python标准库:内置函数callable(object)
- Python标准库:内置函数slice(stop) slice(start, stop[, step])
- Python标准库:内置函数type(object)
- python基础===pendulum '''Python datetimes made easy.'''
- Python常见的数据类型
- 第7讲:Python中整数序列Range函数的概念以及使用