1- pycallgraph简介

可用于创建python函数关系图,依赖于dot命令,需要先安装 graphviz;
 

2- 安装pycallgraph

安装pycallgraph
  1. $ pip3 install pycallgraph --proxy=10.144.1.10:8080
  2. Collecting pycallgraph
  3. Using cached https://files.pythonhosted.org/packages/ca/2e/fafa56316bc2c5fbfbda898f964137c8b5ef33a876cb1f35a54ff6afbd60/pycallgraph-1.0.1.tar.gz
  4. Installing collected packages: pycallgraph
  5. Running setup.py install for pycallgraph ... done
  6. Successfully installed pycallgraph-1.0.1
 
安装graphviz
graphviz(http://www.graphviz.org/)是一个图形可视化软件(Graph Visualization Software),使用dot文件生成关系图;

3- 运行pycallgraph

3-1 直接在命令行方式运行

  1. $ pycallgraph graphviz -- ./test.py
默认将生成一个名为pycallgraph.png的函数关图

3-2 使用API在命令行运行

示例-1
  1. $ cat TempTest.py
  2. #! python3
  3. # -*- coding: utf-8 -*-
  4.  
  5. def testStr(key):
  6. print("testStr is :", key)
  7.  
  8. $ cat CallGraphTest.py
  9. #! python3
  10. # -*- coding: utf-8 -*-
  11. from pycallgraph import PyCallGraph
  12. from pycallgraph.output import GraphvizOutput
  13.  
  14. import TempTest
  15.  
  16. def testNum(key):
  17. TempTest.testStr(key)
  18. print("testNum is :", key)
  19.  
  20. g = GraphvizOutput(output_file=r'./trace.png')
  21. with PyCallGraph(output=g):
  22. TempTest.testStr("111")
  23. testNum(222)
  24.  
  25. $
  26.  
  27. $ py -3 CallGraphTest.py
  28. testStr is : 111
  29. testStr is : 222
  30. testNum is : 222
  31.  
  32. $ ls -l
  33. total 14
  34. drwxr-xr-x 1 guowli 1049089 0 May 23 16:07 __pycache__/
  35. -rwxr-xr-x 1 guowli 1049089 350 May 23 15:56 CallGraphTest.py*
  36. -rwxr-xr-x 1 guowli 1049089 92 May 23 15:59 TempTest.py*
  37. -rw-r--r-- 1 guowli 1049089 9141 May 23 16:07 trace.png
  38.  
  39. $

生成指定名称的函数关系图trace.png

示例-2

  1. #! python3
  2. # -*- coding: utf-8 -*-
  3. from pycallgraph import PyCallGraph
  4. from pycallgraph.output import GraphvizOutput
  5. from pycallgraph import Config
  6. from pycallgraph import GlobbingFilter
  7.  
  8. class Banana:
  9.  
  10. def eat(self):
  11. pass
  12.  
  13. class Person:
  14.  
  15. def __init__(self):
  16. self.no_bananas()
  17.  
  18. def no_bananas(self):
  19. self.bananas = []
  20.  
  21. def add_banana(self, banana):
  22. self.bananas.append(banana)
  23.  
  24. def eat_bananas(self):
  25. [banana.eat() for banana in self.bananas]
  26. self.no_bananas()
  27.  
  28. def main():
  29. graphviz = GraphvizOutput()
  30. graphviz.output_file = 'basic.png'
  31. config = Config()
  32. config.max_depth = 5 # 控制最大追踪深度
  33.  
  34. with PyCallGraph(output=graphviz, config=config):
  35. person = Person()
  36. for a in range(10):
  37. person.add_banana(Banana())
  38. person.eat_bananas()
  39.  
  40. if __name__ == '__main__':
  41. main()

生成函数关系图

4- 在Pycharm运行objgraph

需要在Pycharm中设置Graphviz环境变量,否则可能报错:
  1. 'The command "{}" is required to be in your path.'.format(cmd))
  2. pycallgraph.exceptions.PyCallGraphException: The command "dot" is required to be in your
  3. path.
 
设置Pycharm环境变量步骤:
Run --》Edit Configurations...  --》Default --》Python  --》Environment field group: Environment variables --》 ...  --》+  --》
  • Name: PATH
  • Value: C:\Program Files (x86)\Graphviz2.38\bin

5- 参考信息

Python - 使用pycallgraph生成函数关系图的更多相关文章

  1. Python - 使用objgraph生成对象引用关系图

    1- objgraph简介 HomePage:https://mg.pov.lt/objgraph/ PyPI:https://pypi.org/project/objgraph/ 一般用于分析pyt ...

  2. python xlwt模块生成excel文件并写入数据 xlrd读取数据

    python中一般使用 xlwt (excel write)来生成Excel文件(可以控制单元格格式),用 xlrd 来读取Excel文件,用xlrd读取excel是不能对其进行操作的. 1.xlrd ...

  3. 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的代码和生成静态图节点不一致(当然 ...

  4. Locust 测试结果通过Matplotlib生成趋势图

    目的: 相信大家对于使用Loadrunner测试后的结果分析详细程度还是有比较深刻的感受的,每个请求,每个事务点等都会有各自的趋势指标,在同一张图标中展示.如下图: 而Locust自身提供的chart ...

  5. 使用Python第三方库生成二维码

    本文主要介绍两个可用于生成二维码的Python第三方库:MyQR和qrcode. MyQR的使用: 安装: pip install MyQR 导入: from MyQR import myqr imp ...

  6. python根据文本生成词云图

    python根据文本生成词云图 效果 代码 from wordcloud import WordCloud import codecs import jieba #import jieba.analy ...

  7. Python用MyQR生成自定义个性二维码

    MyQR是一个能够生成自定义二维码的python第三方库,根据需要能够生成普通二维码.带背景图片的艺术二维码.动态二维码. 1.MyQR安装 安装非常简单,直接用pip install MyQR,需要 ...

  8. 利用python画出SJF调度图

    最先发布在csdn.本人原创. https://blog.csdn.net/weixin_43906799/article/details/105510046 SJF算法: 最短作业优先(SJF)调度 ...

  9. 使用Python代码制作GIF动态图

    使用Python  PIL.Image 制作GIF图片: import  PIL.Image                      相关模块 img = Image.open(img_name)  ...

随机推荐

  1. go的包下载失败解决方案

    包被墙的方案 1 翻啊的墙 2 gopm 3 https://github.com/golang/net 4 使用国内网站打包 5 export GOPROXY=https://goproxy.io

  2. [Jenkins Git] 在Jenkins上拉代码总是失败,跑去本地看,提示输入用户名和密码,但是Jenkins上已经配置了正确的用户名和密码

    git config --global credential.helper manager

  3. 遍历ArcMap已加载数据的属性

    import arcpy f = open("D:\workspace\coords.txt","w") with arcpy.da.SearchCursor( ...

  4. WinForm DotNetBar 动态添加DataGridView

    DataGridView dgv = new DataGridView(); dgv.Dock = DockStyle.Fill; dgv.Location = new System.Drawing. ...

  5. xtrabackup命令用法实战(转)

    xtrabackup命令用法实战 转载出自 https://blog.csdn.net/wfs1994/article/details/80399408 完全备份 1.创建备份 [root@linux ...

  6. Springboot & Mybatis 构建restful 服务五

    Springboot & Mybatis 构建restful 服务五 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务四 2 restful ...

  7. homework1-201521410029

    姓名:孙浩学号: 201521410029指导教师:高见                实验日期:2018年8月9日 1. 虚拟机安装与调试 安装好xp和kali虚拟机之后,查看这三者(包括主机)的i ...

  8. Springboot单例模式实战封装json转换

    一.定义 保证一个类仅有一个实例,并提供一个全局访问点. 二.优点 (1)在内存里只有一个实例,减少了内存开销      (2)可以避免对资源的多重占用      (3)设置全局访问点,严格控制访问 ...

  9. JavaScript-BOM与DOM

    BOM与DOM BOM: Browser Object Model(浏览器对象模型),即把 浏览器 当做一个对象来看待.BOM 除了可以访问文档中的组件之外,还可以访问 浏览器组件,比如页面中的 na ...

  10. 数据结构C语言顺序表

    #include <stdio.h> #include <stdlib.h> typedef int EmenType; typedef struct Node { int d ...