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

news2024/10/4 8:20:13

一、静态代码关系图

工具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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何通过Python SMTP配置示例发附件邮件?

Python SMTP配置的步骤?SMTP服务器的优缺点有哪些? 当我们需要发送包含附件的邮件时,自动化的解决方案显得尤为重要。Python提供了SMTP库,使我们能够轻松配置并发送带有附件的邮件。AokSend将通过一个示例来展示如何操作&#xf…

大坝监测新规范的改进与实施

近年来,为了进一步保障大坝的安全运行,相关部门对大坝监测规范进行了多项改进。本文将详细介绍这些改进措施及其重要性。 1、巡视检查的部位由原来的7个增加到8个,新增了对监测设施的巡查。这一改动确保了监测设施的正常运行,能够…

CR80通用清洁卡:证卡打印机、ATM机、POS机、读卡器等卡片设备清洁维护的好助手!

随着科技的进步,ATM机、POS终端、门禁系统、证卡打印机、读卡器等卡片设备在我们的日常生活中扮演着越来越重要的角色,些设备在长时间使用和环境因素的影响下,容易积聚油脂、灰尘和其他污染物,从而对其性能和功能产生负面影响。 深…

广东智慧物流2024年端午节放假安排

广东智慧物流2024年端午节放假安排

C# 反射类Assembly 程序集(Assembly)用法

常见的两种程序集: 可执行文件(.exe文件)和 类库文件(.dll文件)。 在VS开发环境中,一个解决方案可以包含多个项目,而每个项目就是一个程序集。 他们之间是一种从属关系,也就是说&…

【YOLOv10改进[CONV]】2024年的DynamicConv助力YOLOv10目标检测效果 + 含全部代码和详细修改方式 + 手撕结构图 + 全网首发

本文将使用2024的DynamicConv助力YOLOv10目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后参数量对比: 目录 一 DynamicConv

PyTorch 相关知识介绍

一、PyTorch和TensorFlow 1、PyTorch PyTorch是由Facebook开发的开源深度学习框架,它在动态图和易用性方面表现出色。它以Python为基础,并提供了丰富的工具和接口,使得构建和训练神经网络变得简单快捷。 发展历史和背景 PyTorch 是由 Fac…

EDA数据跨网交换解决方案,一文了解

EDA数据通常与电子设计自动化相关,这是一种利用计算机辅助设计(CAD)软件来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计等流程的技术。以下是一些会涉及到EDA数据的行业: 集成电路设计…

生命在于学习——Python人工智能原理(3.2)

三、深度学习 (二)人工神经网络 人工神经网络是模仿人类大脑神经系统工作原理所创建的数学模型,有并行的分布处理能力、高容错性和自我学习等特征。 1、感知器 感知器由Frank Roseblatt于1957年提出,是一种广泛使用的线性分类…

桌面型激光雕刻机的发展前景及TMC应用优势

一、行业现状 近两年来,激光雕刻行业正处于快速发展阶段。随着人们生活水平的提高,对个性化、定制化产品的需求日益增加,激光雕刻以其独特的创意和精美的效果,满足了消费者对个性化产品的追求。同时,随着科技的不断进…

svg完成鼠标样式并使用

本次分享的是通过svg标签实现的鼠标样式&#xff0c;并在页面中进行使用的整个过程&#xff0c;最后还会分享快速制作svg的简单方式。 如有改进的方法或者发现错误也可以在评论区留言啊。 一、鼠标的svg样式 1.小飞机型 <svg width"32" height"32" xml…

[行业原型] 汽车供应链多地分销一站式云端解决方案

互联网改变了企业经营模式、竞争环境&#xff0c;同时还在改变企业的交易方式&#xff0c;影响着企业间的协作。 全球化电子商务环境下&#xff0c;传统的供应链管理模式不能适应新环境下供应链管理要求&#xff0c;新的供应链管理模式—eSCM。 eSCM是将分销管理、客户资源管理…

Xilinx RFSOC 47DR 8收8发 信号处理板卡

系统资源如图所示&#xff1a;  FPGA采用XCZU47DR 1156芯片&#xff0c;PS端搭载一组64Bit DDR4,容量为4GB,最高支持速率&#xff1a;2400MT/s;  PS端挂载两片QSPI X4 FLASH&#xff1b;  PS支持一路NVME存储&#xff1b;  PS端挂载SD接口&#xff0c;用于存储程序&…

Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

Mac 苹果电脑下载安装《植物大战僵尸杂交版2.0.88》详细指南教程(含已损坏打不开等问题解决)

最近植物大战僵尸杂交版可是非常的火爆&#xff0c;各大主播都在玩&#xff0c;可是该游戏作者只发布了win版本&#xff0c;我只有一台 Macbook 一直都很想玩&#xff0c;经过一番折腾终于在Mac上成功安装运行了该游戏&#xff0c;并整理好了&#xff0c;大家想要在 Mac 上安装…

win11通过网线分享网络到Ubuntu工控机

1.条件&#xff1a;一个能无线联网的win11&#xff0c;一根网线&#xff0c;一台Ubuntu工控机&#xff0c;并且使用网线连接两者 2.在win11电脑上 2.1 打开控制面板的网络和Internet 2.2 进入网络和共享中心&#xff0c;在左侧进入 更改适配器设置 2.3 在WLAN上右键&#xff0…

客户案例 | 思腾合力助力国内某自动化研究所算力平台建设

国内某自动化研究所&#xff0c;其主要研究方向是机器人、智能制造与光电信息技术。其所着眼于国民经济和国家安全重大战略需求&#xff0c;凝练研究方向&#xff0c;在机器人与智能制造领域着重开展创新研究&#xff0c;在机器人学、工业机器人、水下机器人、空间机器人及自动…

“新高考”下分班怎么分?

来自安徽的张女士告诉我&#xff1a;上一年孩子升入了高中&#xff0c;但没想到才高一&#xff0c;孩子就面临了一个困难的挑选&#xff1a;312”分班&#xff01; 什么是312”分班呢&#xff1f;许多人或许不明白&#xff0c;便是要求学生在高一入学时&#xff0c;针对于3门必…

1882java密室逃脱管理系统 Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java密室逃脱管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…

Linux服务器扩容及磁盘分区(LVM和非LVM)

Linux扩容及磁盘分区&#xff08;LVM和非LVM&#xff09; 本文主要介绍了阿里云服务器centos的扩容方法&#xff1a;非LVM分区扩容方法&#xff08;系统盘&#xff09;&#xff0c;以及磁盘改LVM并分区&#xff08;数据盘&#xff09;。主要是ext4文件系统及xfs磁盘scsi MBR分…