当前位置: 首页 > news >正文

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 GraphvizOutputclass Banana:def eat(self):passclass 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

相关文章:

  • Vue.js的核心概念:如何理解Vue.js的声明式渲染、组件系统、Vue实例、Vue生命周期等核心概念。
  • 机器学习实战项目一(卡通化图像)
  • Linux命令篇(一):文件管理部分
  • 阿里云短信服务使用(Java)
  • C# 语言类型(二)—预定义类型之字符串及字符类型简述
  • 深入理解Java中的List集合:解析实例、优化技巧与最佳实践
  • HackTheBox-Machines--Lazy
  • 数据结构——图
  • Lua的几个特殊用法
  • PHP面向对象编程总结
  • Flutter 中的 SliverCrossAxisGroup 小部件:全面指南
  • C++ 变量的声明和初始化方式
  • <Rust><iced>基于rust使用iced库构建GUI实例:动态改变主题色
  • 使用Spring的@Scheduled注解实现定时任务
  • 关于高版本 Plant Simulation 每次保存是 提示提交comm对话框的处理方法
  • .pyc 想到的一些问题
  • es6
  • HTTP--网络协议分层,http历史(二)
  • isset在php5.6-和php7.0+的一些差异
  • Java精华积累:初学者都应该搞懂的问题
  • js ES6 求数组的交集,并集,还有差集
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 大快搜索数据爬虫技术实例安装教学篇
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 关于 Cirru Editor 存储格式
  • 聊一聊前端的监控
  • 前言-如何学习区块链
  • 区块链将重新定义世界
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 异步
  • 赢得Docker挑战最佳实践
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 正则表达式-基础知识Review
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #php的pecl工具#
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (145)光线追踪距离场柔和阴影
  • (2.2w字)前端单元测试之Jest详解篇
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (Python第六天)文件处理
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二)windows配置JDK环境
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (六)软件测试分工
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)Sublime Text3配置Lua运行环境
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net接口调试与案例
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递