如何从Python源代码中获取类图?

7

我尝试使用pyreverseClient文件夹中的Python源代码获取类图,但需要__init__.py

(venv) C:\Users\User\Desktop\project> pyreverse Client
parsing Client\__init__.py...
Failed to import module Client\__init__.py with error:
No module named Client\__init__.py.

我找不到任何解决方案。有没有办法获取这个图表?

更新: Client 文件夹中有许多文件:

Client.py
GUI.py
script.py
...

这是 Client.py 代码的一部分:
import threading


class Client:
    def __init__(self):
        self.socket = None
        self.listen_socket = None
        self.buff_dict = {}
        self.message_list_dict = {}
        self.lock = threading.Lock()
        self.target = None
        self.listen_flag = True

这是 GUI.py 代码的一部分:

import tkinter as tk


class Window(object):
    def __init__(self, title, font, client):
        self.title = title
        self.font = font
        self.client = client
        self.root = tk.Tk()
        self.root.title(title)
        self.build_window()

    def build_window(self):
        pass


class LoginWindow(Window):
    def __init__(self, client, font):
        super(LoginWindow, self).__init__('Login', font, client)
        self.build_window()

@Anwarvic,我应该发布Client文件夹中的所有代码或所有文件的名称? - huy
3
@huy,那么您需要在这个文件夹内创建一个__init__.py文件。 - Anwarvic
2
@huy,什么都没有……只是一个空文件。 - Anwarvic
@Anwarvic 看起来可以工作,现在我只需要将.dot文件转换成.png文件。 - huy
2
@huy 只需使用选项 -o png - bruno
显示剩余7条评论
3个回答

9

感谢 @Anwarvic 和 @bruno,我想出了这个解决方案。

首先,在Client文件夹中创建空的__init__.py文件:

(venv) C:\Users\User\Desktop\project\Client> type NUL >  __init__.py

接下来,进入我想要获取类图的Client文件夹的父文件夹:

(venv) C:\Users\User\Desktop\project> pyreverse Client -o png

但是我遇到了这个错误:

The output format 'png' is currently not available.
Please install 'Graphviz' to have other output formats than 'dot' or 'vcg'.

在一些调查后,我找到了这个解决方案。然后我就可以无错误地运行pyreverse

这是我使用pyreverse得到的类图:

enter image description here


对我来说,只需简单地通过touch __init__.py创建一个空的文件,然后运行pyreverse ./ -a1 -s1,接着运行dot -Tpng ./output.png ./classes.dot就可以了。 - undefined

1
最方便的方法应该是有一个Jupyter笔记本扩展程序,可以动态生成类图,类似于变量检查器 - 可能带有指定替代根目录的选项,如第一个答案中提到的datetimecreating UML charts by Pylint/pyreverse within Jupyter labs / console
注意:这将消除pyreverse需要显示的类必须是模块的一部分的限制。

1
似乎您的包含Client.py文件的文件夹中没有__init__.py。您应该可以创建一个空文件,因为它的主要目的是指示该文件夹是一个包。
有关文件的更深入解释,请参见this SO question关于__init__.py。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接