生成项目UML框架图-pyreverse介绍

王 茂南 2020年11月17日07:36:10
评论
3425字阅读11分25秒
摘要这一篇介绍pyreverse这个工具, 可以自动生成Python项目的ML框架图, 方便我们快速的了解一个项目的结构.

简介

有的时候为了可以快速了解一个项目, 我们会画出这个项目的UML框架图. 在Python代码中就提供了一个工具pyreverse来帮助我们通过给出的源码绘制出UML框架图. 目前pyreverse已经集成在了Pylint里面. 所以我们直接安装Pylint即可.

 

参考资料

 

Pyreverse的使用

将Pyreverse添加到环境变量

如果要在Windows下使用pyreverse, 我们需要首先确保pyreverse.exe已经添加到了系统环境变量里面. 我们可以使用pyreverse --help来确认是否添加成功. 注意添加之后, 需要重启我们的终端.

生成项目UML框架图-pyreverse介绍

注意, 如果添加了路径仍然不行 (出现报错Fatal error in launcher: Unable to create process using), 可以尝试将Pylint删除后重新进行安装.

  1. pip uninstall pylint
  2. pip install pylint

 

使用Pyreverse生成dot文件

在确认路径添加了pyreverse之后, 我们可以开始生成dot文件. 有以下一些可以选择的参数:

  • -c, create a class diagram with all classes related to class, 只创建关于一个class的相关的图.
  • -m [yn], include module name in representation of classes (包含整个module的名称, 一般这里选择yes, y)
  1. pyreverse --module-names=y --class=module.entry.SumoRunner .\module

这样会生成一个dot文件, 下面我们会对dot文件进行预览, 进行修改, 和生成相应的图片. 除了对module进行生成之外, 我们后面可以跟一个文件, 可以对文件进行生成.

  1. pyreverse --module-names=y mosaic.py

同时默认情况下,pyreverse 是不会对「私有方法」进行处理的,如果需要进行处理,需要设置参数 f 的值,下面是一个简单的例子。

  1. pyreverse -f ALL -ASmy .\mcts_pure.py

最后可以生成一个如下图所示的文件, 这部分是生成马赛克图像部分类的结构分布:

生成项目UML框架图-pyreverse介绍

dot文件的修改

我们可以对生成的dot文件进行一些修改, 例如更改label的颜色. 并且可以去掉一些label.

  1. fontcolor="red"

下面这段代码, 可以实现两个功能:

  • 对我们指定生成的class增加为红色;
  • 只保留我们需要的module, 其他的module都可以删除.
  1. '''
  2. @Author: WANG Maonan
  3. @Date: 2020-10-15 17:18:52
  4. @Description: 简化dot文件
  5. @LastEditTime: 2020-10-15 18:00:36
  6. '''
  7. def simplied_dot(dot_file, label_name, module_name):
  8.     """两个功能: 
  9.     => 自动在label处加上红色.
  10.     => 删除不需要的label和label的链接
  11.     """
  12.     delete_labels = [] # 需要删除的label
  13.     new_dot_file = '' # 之后保存一个新的dot文件
  14.     with open(dot_file, mode='r', encoding="UTF-8") as file# 找出要删除的label ID
  15.         for line in file:
  16.             if (module_name not in line) and ('->' not in line) and ('label' in line):
  17.                 label_id = line.split('"')[1] # 获取label ID
  18.                 delete_labels.append(label_id)
  19.     print('要删除的ID, {}'.format(delete_labels))
  20.     with open(dot_file, mode='r', encoding="UTF-8") as file:
  21.         for line in file:
  22.             if 'fontcolor="green"' in line:
  23.                 line = line.replace('fontcolor="green"', 'fontcolor="blue"')
  24.             if (label_name in line) and ('label' in line): # 给合适的lane添加颜色
  25.                 line = line.replace('];', 'fontcolor="red"];')
  26.             if ('->' not in line) and ('label' in line):
  27.                 label_id = line.split('"')[1]
  28.                 if label_id in delete_labels:
  29.                     line = ''
  30.             if '->' in line:
  31.                 connection_list = line.split('"')
  32.                 from_id, to_id = connection_list[1], connection_list[3]
  33.                 if (from_id in delete_labels) or (to_id in delete_labels):
  34.                     line = ''
  35.             new_dot_file = new_dot_file + line
  36.     with open(dot_file, mode="w", encoding="utf-8") as f:
  37.             f.write(new_dot_file)
  38. if __name__ == "__main__":
  39.     simplied_dot('./module.entry.SumoRunner.dot', label_name='SumoRunner', module_name='module')

 

VS Code插件-Graphviz Interactive Preview

我们可以对生成的dot文件进行修改, 首先下载VS Code插件, Graphviz Interactive Preview. 这个插件可以预览dot文件的信息. 安装完毕之后, 使用Ctrl+Shitf+P, 打开命令, 输入Graphviz Interactive即可.

生成项目UML框架图-pyreverse介绍

之后我们的dot文件就能够可视化进行显示:

生成项目UML框架图-pyreverse介绍

 

将dot文件生成图片

首先我们需要确保安装了graphviz, 并已经添加到了系统变量中. Windows可以在地址, Graphviz - Graph Visualization Software, 来进行下载.

关于详细的下载说明, 也可以参考一下链接, 【Python】Windows环境下安装graphviz和pygraphviz

接着就可以使用下面的命令来生成png图片了. 这个的T后面表示要生成的格式, 这里是要生成png的格式, 所以参数是-Tpng.

  1. dot -Tpng classes.dot -o securedrop_export.png

有了生成的图片之后, 我们就可以打印出来去查看一个项目的整体结构了. 关于打印大图, 可以参考文章, 大图的分页打印-文艺数学君

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2020年11月17日07:36:10
  • 转载请务必保留本文链接:https://mathpretty.com/12952.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: