Python代码关系图生成,帮助快速熟悉一个项目

一、静态代码关系图

工具1、pyreverse

pyreverse 是一个由 Logilab 开发的 Python 工具,它能够自动生成 UML (统一建模语言) 类图,这些类图基于 Python 源代码。pyreverse 可以分析 Python 代码,并从中提取出类、模块、函数、方法和它们之间的关系,然后生成图形化的表示,这对于理解和设计复杂的软件系统非常有用。

pyreverse 已经集成到pylint里面了,帮助文档地址:https://pylint.readthedocs.io/en/stable/pyreverse.html

在命令行使用pip安装命令pylint即可:pip install pylint

安装完成后就可以在windows命令行使用pyreverse命令

使用pyreverse解析一个包

命令行输入pyreverse D:\pytest\pyan,解析pyan包

运行完成后命令行运行目录下会生成两个文件:classes.dot、packages.dot

命令行使用dot命令将dot 文件转换为svg文件(浏览器可打开svg文件)

dot -Tsvg classes.dot -o classes.svg

dot -Tsvg packages.dot -o packages.svg

查看packages.svg文件

classes.svg太大了,不截图了

这里有一个坑,pyreverse 需要解析的报目录下有__init__.py文件。如果没有就会报错。如果缺少 __init__.py 文件,我们可以在目录中自己手工创建一个__init__.py的空文件即可,重新运行pyreverse就不会报错了。

使用pyreverse解析一个文件

命令行输入命令pyreverse D:\pytest\pyan\writers.py,解析writers.py文件

因为只是一个文件,所以并没有生成packages.dot,只生成了classes.dot

vscode也有pylint的插件,可以安装使用

工具2、pyan

pyan是一个 Python 工具,用于生成 Python 代码的静态分析报告,包括函数调用图。它可以帮助你理解代码的执行流程,特别是对于大型项目或者新接手的项目。

使用pyan解析一个包

在命令行输入pyan3 D:\pytest\pyan\*.py -v -e --svg > pyan.svg

解析结果太大了,不截图了

使用pyan解析一个文件

在命令行输入pyan3 D:\pytest\pyan\writers.py -v -e --svg > pyan.svg

对比pyreverse,可以看到pyan3到方法级的引用了,而pyreverse只是到类级,pyan3可以看的更细致些(头晕些)

二、动态调用关系图

pycallgraph 是一个用于 Python 应用程序的图形化调用跟踪工具。它可以帮助你可视化 Python 代码的执行流程,生成函数调用图(Call Graph)。这对于理解和分析代码结构特别有用,尤其是在处理大型项目或复杂逻辑时。

安装:pip install pycallgraph2(有个坑,注意不是pip install pycallgraph)

#!/usr/bin/env python
'''
This example demonstrates a simple use of pycallgraph.
'''
from pycallgraph2 import PyCallGraph
from pycallgraph2.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 = 'basic.png'

    with PyCallGraph(output=graphviz):
        person = Person()
        for a in range(10):
            person.add_banana(Banana())
        person.eat_bananas()


if __name__ == '__main__':
    main()

另外,vscode开发环境中也可以使用一些插件来辅助调试,查看代码调试的动态情况,例如debug-visualizer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/673428.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java项目:94 springboot大学城水电管理系统

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本管理系统有管理员和用户。 本大学城水电管理系统管理员功能有个人中心,用户管理,领用设备管理,消耗设备…

docker和docker-compose的安装

docker的安装 1.安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.设置开机自启动 systemctl start docker #启动docker systemctl enable docker3.配置阿里云镜像 不配置镜像的话,进行 docker pull 等操作会比较慢。进入阿里云&…

【MySQL】聊聊order by 是如何排序的

CREATE TABLE t (id int(11) NOT NULL,city varchar(16) NOT NULL,name varchar(16) NOT NULL,age int(11) NOT NULL,addr varchar(128) DEFAULT NULL,PRIMARY KEY (id),KEY city (city) ) ENGINEInnoDB;构建一个表结构,以及数据。 本篇主要来分析下order by是如何进…

SpringBoot 定时任务+Quartz

1、分部解释2、整体代码 前言: 1、定时任务技术: JDK 的 Timer, 定义多个定时任务,其中某个任务出现异常,当时整个定时任务终止。Spring Task , 不支持 持久化与分布式部署,所有任务是单线程执行…

【RPG Maker MV 仿新仙剑 战斗场景UI (九)】

RPG Maker MV 仿新仙剑 战斗场景UI 九 前言角色战斗精灵精灵图设置攻击 战斗背景图 前言 前段天研究并完成了主角人物行走图部分的开发,完成了对应的8方向行走,及精灵的展示。现在开始重新回到战斗场景的开发中,回顾下,已完成功能…

植物大战僵尸杂交版(最新版)

杂交版1.0文件链接 链接:https://pan.baidu.com/s/1Ew6iTg0_d_Ut8N9_18KGLw 提取码:yspa 杂交版2.0文件链接 链接:https://pan.baidu.com/s/1tuchowb4C_oNT6EpqSvr_w?pwdy2fz 提取码:y2fz

如何解决游戏行业DDOS攻击问题

随着网络游戏行业的迅速发展,网络游戏问题也不可忽视,特别是目前网络攻击频发,DDoS攻击的简单化以及普及化,对游戏来说存在非常大的安全威胁。 随着受攻击对象的范围在不断地拓展,网络游戏这种这种新型并且有着丰厚利…

罗德里格斯旋转公式证明-简洁

罗德里格斯旋转公式证明。 设旋转向量为 ( n , θ ) (n, \theta) (n,θ),设其对应的旋转矩阵为 R R R, 如何证明? R c o s θ I n ∧ s i n θ ( 1 − c o s θ ) n n T Rcos\theta I n^{\wedge}sin\theta(1-cos\theta)nn^{T} RcosθI…

HTML5常用标签表格

04-08、表格标签table 概述 表格:是一种行和列组合而成的单元格。一般应用于后台网页设计管理数据使用。 表格的架构部分: tabletable head 表格头 theadtable body - 表格体 tbodytable foot -表格的页脚 tfoot 表格的基本组成部分: t…

minos 1.2 内存虚拟化——guest

首发公号:Rand_cs 该项目来自乐敏大佬:https://github.com/minosproject/minos 项目来自乐敏大佬:https://github.com/minosproject/minos 本文继续讲述 minos 中的内存虚拟化中关于 guest 的部分,主要弄清楚一个问题&#xff0c…

LNMP网络架构

操作准备:准备三台虚拟机 安装 MySQL 服务 (1)准备好mysql目录上传软件压缩包并解压 cd /opt mkdir mysql tar xf mysql-boost-5.7.44.tar.gz (2)安装mysql环境依赖包 yum -y install ncurses ncurses-devel bison…

fpga入门 串口定时1秒发送1字节

一、 程序说明 FPGA通过串口定时发送数据,每秒发送1字节,数据不断自增 参考小梅哥教程 二、 uart_tx.v timescale 1ns / 1psmodule uart_tx(input wire sclk,input wire rst_n,output reg uart_tx);parameter …

基本算法——位运算

a^b 原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目描述 运行代码 #include<iostream> using namespace std; long long a,b,c,t1; int main() {cin>>a>>b>>c;for(;b;b/2){if(b&1)tt*a%c;aa*a%c;}cout<<t%c; } 代码思路…

Unity MiniCPM-V 让引擎拥有视觉

Unity MiniCPM-V 让引擎拥有视觉 前言项目Python环境布置Unity场景布置代码编写添加并设置脚本总结 鸣谢AI提示 前言 新发布的MiniCPM-V&#xff0c;忍不住玩一下&#xff0c;可以让之前制作的语音助手拥有一定的视觉能力&#xff08;不是OpenCV不行&#xff0c;而是AI更加符合…

项目中MySQL数据库设计(尚庭公寓)

数据库设计 1 数据库设计理论 1.1 数据库模型 数据库设计中最常采用的模型为实体&#xff08;Entity&#xff09;关系&#xff08;Relationship&#xff09;模型&#xff0c;简称ER模型。其核心思想是将现实世界中的复杂数据表示为一组实体&#xff0c;并描述这些实体之间的…

minos 2.5 中断虚拟化——vGIC

首发公号&#xff1a;Rand_cs 该项目来自乐敏大佬&#xff1a;https://github.com/minosproject/minos 这一节开始讲述真正的中断虚拟化&#xff0c;首先来看硬件方面的虚拟化。前文 minos 2.3 中断虚拟化——GICv2 管理 主要讲述 GICv2 的 Distributor 和 CPU Interface&…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:3D扫描仪 实时创建 VR 内容

虽然 VR 技术彻底改变了娱乐、医疗、建筑、教育和产品设计等各个日常生活领域&#xff0c;但创建 VR 内容仍然是一项不易突破的挑战。 英伟达在旧金山举行的 Jetson TX2发布会上&#xff0c;展示了Jetson TX2如何能够加快 AI 计算、图形和计算机视觉的运行速度&#xff0c;并且…

【一小时学会Charles抓包详细教程】Charles 抓包相关设置 (7)

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 Charles 抓包相…

数据库学习总结

Mysql学习总结 汇总数据 聚集函数&#xff1a; 函数 说明 AVG() 返回某列的平均值 COUNT() 返回某列的行数 MAX() 返回某列的最大值 MIN() 返回某列的最小值 SUM() 返回某列值之和 例&#xff1a; AVG函数&#xff1a; select avg(grade) from topic; COUNT函…

WiFi蓝牙模块促进传统零售数字化转型:智能零售体验再升级

随着科技的不断发展&#xff0c;数字化转型已经成为了各行各业的必然趋势。在传统零售业中&#xff0c;WiFi蓝牙模块的应用正逐渐推动着行业的数字化转型&#xff0c;为消费者带来更加智能化、便捷化的零售体验。本文MesoonRF美迅物联网将从以下几个方面阐述WiFi蓝牙模块在传统…