我有这个代码repo

I created manual UML which look like this: enter image description here

我正在try 通过pyreverse自动生成UML:

pyreverse -o png -p ShoppingCart ./mainService.py

本机不支持PNG格式.PYREVERS将try 生成 它使用了Graphviz...

不幸的是,它给了我一张空白的图表.要使项目的类出现在图表中,我可以做些什么?

这是文件 struct :

.
├── Entity
│   ├── Apple.py
│   ├── Buy1Get1FreeApple.py
│   ├── Buy3OnPriceOf2Orange.py
│   ├── Offer.py
│   ├── Orange.py
│   ├── Product.py
│   └── ShoppingCart.py
├── Enum
│   └── ProductType.py
└── mainService.py

推荐答案

In short

假设已正确安装了pyverse和graph viz,您需要做的就是将项目打包,并在每个文件夹中添加一些emplty_init__py文件.或者,您必须在命令行中手动添加所有模块.

More details - step by step

关于错误信息

假设一切都安装正确,您的命令行应该会给出警告消息,这是绝对正常的:

本机不支持PNG格式.PYREVERS将try 生成 它使用了Graphviz...

怎么了?

该图将保持为空,因为您告诉pyverse分析单个文件,而该文件中没有定义任何类.如果您手动添加要分析的不同模块:

pyreverse -o png -p ShoppingCart mainService.py Entity\Apple.py Enum\ProductType.py Entity\Orange.py Entity\ShoppingCart.py

然后,您将很好地获得一个基本的图表:

four classes side by side

如果你预先添加选项-AS,你将递归地获得项目中的所有祖先和所有关联的类:

enter image description here

如何打包你的项目?

这很麻烦.幸运的是,打包您的项目几乎没有遗漏.关于完整的推荐信,你可能会看起来像here岁.但简而言之,在项目文件夹和存储模块的每个子文件夹中添加一个空的__init__.py文件就足够了:

.
├── Entity
│   ├── __init__.py                   <<===== add this empty file
│   ├── Apple.py
│   ├── Buy1Get1FreeApple.py
│   ├── Buy3OnPriceOf2Orange.py
│   ├── Offer.py
│   ├── Orange.py
│   ├── Product.py
│   └── ShoppingCart.py
├── Enum
│   ├── __init__.py                   <<===== add this empty file
│   └── ProductType.py
├── __init__.py                       <<===== add this empty file
└── mainService.py

然后,您将能够运行更简单的命令行:

pyreverse -AS -o png -p ShoppingCart .

并得到这张巨大的图表:

enter image description here

该打包帮助python和pyverse理解这些不是单独分析的文件,而是在由子包等组成的包的上下文中分析.

Python相关问答推荐

如何使用stride_tricks.as_strided逆转NumPy数组

如何根据情况丢弃大Pandas 的前n行,使大Pandas 的其余部分完好无损

根据给定日期的状态过滤查询集

DataFrame groupby函数从列返回数组而不是值

难以在Manim中正确定位对象

输出中带有南的亚麻神经网络

Pandas 都是(),但有一个门槛

在np数组上实现无重叠的二维滑动窗口

如何在图中标记平均点?

当我try 在django中更新模型时,模型表单数据不可见

如何使用Numpy. stracards重新编写滚动和?

在极中解析带有数字和SI前缀的字符串

Python Pandas—时间序列—时间戳缺失时间精确在00:00

将标签移动到matplotlib饼图中楔形块的开始处

在Admin中显示从ManyToMany通过模型的筛选结果

Pandas—堆栈多索引头,但不包括第一列

Python协议不兼容警告

分解polars DataFrame列而不重复其他列值

查找查找表中存在的列值组合

Match-Case构造中的对象可调用性测试