自动生成python程序调用关系逻辑图

前言

你是否因为看一个程序或者运行一个框架,不知道他的运行流程?

自己想写一个运行流程却觉得麻烦无从下手?

graphviz+pycallgraph帮你绘制让领导看了都拍桌子称赞你的python程序逻辑调用关系图!

先来看一下我这段时间在写的一个框架的部分流程吧~

密密麻麻,真的哈人,完整的更哈人。

狗看了都摇头,这都啥玩意?

用完之后,我的感受就是,不是太复杂的程序逻辑,用它整理确实方便不少。

逻辑很复杂的,你就老老实实地debug吧。

感兴趣的就继续看下去如何使用吧~

1、安装pycallgraph

shell 复制代码
pip install pycallgraph

如果安装这个报错,显示了一个什么setup的,就是你setuptools这个库比较新,需要降级一下才能下载。(因为这个库是2013年的,距今十年了,作者真牛皮!)

降级下载setuptools命令

shell 复制代码
pip install  setuptools==57.5.0

再次安装就可以了

2、下载graphviz

下载graphviz

下载地址:https://www.graphviz.org/download/

我使用的是windows,这个支持很多个平台,linux、mac都能用。

windows挑最新的下载就行,别的系统看官网里面可以直接命令行下载。

https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/8.1.0/windows_10_cmake_Release_graphviz-install-8.1.0-win64.exe

linux下载

bash 复制代码
#方法1
sudo apt install graphviz
bash 复制代码
#方法2
sudo yum install graphviz
bash 复制代码
#方法3
sudo apt install graphviz
bash 复制代码
#方法4
sudo yum install graphviz

mac下载

bash 复制代码
#方法1
sudo port install graphviz
bash 复制代码
#方法2
brew install graphviz

3、windows安装详细流程

1、双击下载好的exe文件,点击下一步

2、点击我接受

3、勾选第二个或者第三个,第二个的意思是给所有用户添加环境变量,第三个的意思是给当前用户添加到环境变量。我勾选的是第二个。勾选完毕点击下一步

4、安装目录使用默认,或者自己更改。我使用的是默认目录,点击下一步

5、点击安装

4、验证

控制台输入dot -v,出现如下内容代表安装成功且配置好了环境变量。

5、使用

这里使用的是官方的例子,并且我在本地成功运行了。

如下代码是标准使用,将code_to_profile()这个函数替换为你自己的执行入口函数即可。

python 复制代码
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput

with PyCallGraph(output=GraphvizOutput()):
    code_to_profile()

官方完整演示代码:

python 复制代码
#!/usr/bin/env python
'''
This example demonstrates a simple use of pycallgraph.
'''
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
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 = 'basic1.png'

    with PyCallGraph(output=graphviz):
        person = Person()
        for a in range(10):
            person.add_banana(Banana())
        person.eat_bananas()
if __name__ == '__main__':
    main()

运行后,会在根目录生成一个basic1.png的图片,内容如下:

6、实践

官方的不是很直观,我写一段很简单的代码,大家看一下就能理解了。

每个分支上还标注了被调用的次数,执行时间,类、方法、属性

代码如下:

python 复制代码
### 绘制流程图
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput

class Demo():
    def __init__(self,name,gender,age):
        self.name = name
        self.age = age
        self.gender = gender

    def what_name(self):
        return self.name

    def what_gender(self):
        return self.gender

    def what_age(self):
        return self.age

    def who(self):
        name = self.what_name()
        gender = self.what_gender()
        age = self.what_age()


def main():
    graphviz = GraphvizOutput()
    graphviz.output_file = 'basicdemo.png'

    with PyCallGraph(output=graphviz):
        aa= Demo("小仔","男","18")
        aa.who()

if __name__ == '__main__':
    main()

流程图如下:

相关推荐
圈圈编码3 分钟前
悲观锁和乐观锁
java·开发语言·sql·mysql
多多*4 分钟前
基于rpc框架Dubbo实现的微服务转发实战
java·开发语言·前端·redis·职场和发展·蓝桥杯·safari
IT小码哥丶17 分钟前
华为仓颉语言初识:并发编程之同步机制(上)
java·开发语言
belong_to_you25 分钟前
python模块——tqdm
python
一抓掉一大把37 分钟前
MiniExcel模板填充Excel导出
开发语言·javascript·ecmascript
小红帽2.01 小时前
开源PHP在线客服系统源码搭建教程
开发语言·开源·php
L_cl1 小时前
【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】
python·算法·排序算法
Vertira1 小时前
Pytorch安装后 如何快速查看经典的网络模型.py文件(例如Alexnet,VGG)(已解决)
人工智能·pytorch·python
qq_433554541 小时前
C++ list代码练习、set基础概念、set对象创建、set大小操作
开发语言·c++·list
老歌老听老掉牙1 小时前
使用 SymPy 进行向量和矩阵的高级操作
python·线性代数·算法·矩阵·sympy