文章目录(Table of Contents)
简介
有的时候为了可以快速了解一个项目, 我们会画出这个项目的UML框架图. 在Python代码中就提供了一个工具pyreverse
来帮助我们通过给出的源码绘制出UML框架图. 目前pyreverse
已经集成在了Pylint
里面. 所以我们直接安装Pylint
即可.
参考资料
- pylint相关说明和安装, pylint 2.6.0
- 这是一篇简单介绍pyreverse使用的文章, 给出了一个完整的操作流程, Using pyreverse to generate UML class diagrams
- Pyreverse的详细使用说明, Instructions_UML_Python.rst
- 这里是一些除了pyreverse之后, 一些其他的UML的工具, UML Tools for Python
Pyreverse的使用
将Pyreverse添加到环境变量
如果要在Windows下使用pyreverse
, 我们需要首先确保pyreverse.exe
已经添加到了系统环境变量里面. 我们可以使用pyreverse --help
来确认是否添加成功. 注意添加之后, 需要重启我们的终端.
注意, 如果添加了路径仍然不行 (出现报错Fatal error in launcher: Unable to create process using), 可以尝试将Pylint
删除后重新进行安装.
- pip uninstall pylint
- 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)
- pyreverse --module-names=y --class=module.entry.SumoRunner .\module
这样会生成一个dot
文件, 下面我们会对dot文件进行预览, 进行修改, 和生成相应的图片. 除了对module进行生成之外, 我们后面可以跟一个文件, 可以对文件进行生成.
- pyreverse --module-names=y mosaic.py
同时默认情况下,pyreverse 是不会对「私有方法」进行处理的,如果需要进行处理,需要设置参数 f
的值,下面是一个简单的例子。
- pyreverse -f ALL -ASmy .\mcts_pure.py
最后可以生成一个如下图所示的文件, 这部分是生成马赛克图像部分类的结构分布:
dot文件的修改
我们可以对生成的dot文件进行一些修改, 例如更改label的颜色. 并且可以去掉一些label.
- fontcolor="red"
下面这段代码, 可以实现两个功能:
- 对我们指定生成的class增加为红色;
- 只保留我们需要的module, 其他的module都可以删除.
- '''
- @Author: WANG Maonan
- @Date: 2020-10-15 17:18:52
- @Description: 简化dot文件
- @LastEditTime: 2020-10-15 18:00:36
- '''
- def simplied_dot(dot_file, label_name, module_name):
- """两个功能:
- => 自动在label处加上红色.
- => 删除不需要的label和label的链接
- """
- delete_labels = [] # 需要删除的label
- new_dot_file = '' # 之后保存一个新的dot文件
- with open(dot_file, mode='r', encoding="UTF-8") as file: # 找出要删除的label ID
- for line in file:
- if (module_name not in line) and ('->' not in line) and ('label' in line):
- label_id = line.split('"')[1] # 获取label ID
- delete_labels.append(label_id)
- print('要删除的ID, {}'.format(delete_labels))
- with open(dot_file, mode='r', encoding="UTF-8") as file:
- for line in file:
- if 'fontcolor="green"' in line:
- line = line.replace('fontcolor="green"', 'fontcolor="blue"')
- if (label_name in line) and ('label' in line): # 给合适的lane添加颜色
- line = line.replace('];', 'fontcolor="red"];')
- if ('->' not in line) and ('label' in line):
- label_id = line.split('"')[1]
- if label_id in delete_labels:
- line = ''
- if '->' in line:
- connection_list = line.split('"')
- from_id, to_id = connection_list[1], connection_list[3]
- if (from_id in delete_labels) or (to_id in delete_labels):
- line = ''
- new_dot_file = new_dot_file + line
- with open(dot_file, mode="w", encoding="utf-8") as f:
- f.write(new_dot_file)
- if __name__ == "__main__":
- 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
即可.
之后我们的dot文件就能够可视化进行显示:
将dot文件生成图片
首先我们需要确保安装了graphviz
, 并已经添加到了系统变量中. Windows可以在地址, Graphviz - Graph Visualization Software, 来进行下载.
关于详细的下载说明, 也可以参考一下链接, 【Python】Windows环境下安装graphviz和pygraphviz
接着就可以使用下面的命令来生成png图片了. 这个的T后面表示要生成的格式, 这里是要生成png的格式, 所以参数是-Tpng
.
- dot -Tpng classes.dot -o securedrop_export.png
有了生成的图片之后, 我们就可以打印出来去查看一个项目的整体结构了. 关于打印大图, 可以参考文章, 大图的分页打印-文艺数学君
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论