自动生成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 分钟前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境9 分钟前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd12313 分钟前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102161 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb001 小时前
一个项目带你入门AI应用开发01
python
0566461 小时前
Python康复训练——常用标准库
开发语言·python·学习
骊城英雄2 小时前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#
吾儿良辰2 小时前
一个被BCL遗忘的高性能集合:C# CircularBuffer<T>深度解析
开发语言·windows·c#
昆曲之源_娄江河畔2 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql
Leighteen2 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言