是的,pygraphviz 或 gvgen 都可以很好地完成这项任务。 GVGen 在依赖性方面更小,它会生成一个“.dot”文件,然后您将其提供给您通过下载 graphviz 包获得的“dot”命令行工具。 Pygraphviz 可以直接转至 png、svg 等,但在某些电脑上安装会比较困难。
我已经使用了 pygraphviz 和 gvgen,它们都相当简单并且可以生成我需要的结果。
但作为一个粗略的例子,使用 gvgen(我今天才使用)你会说:
import os
from gvgen import GvGen
graph = GvGen()
sources = ["machineA", "machineB", "machineC"]
connections = [("machineA", "machineB", "22"), ("machineC", "machineA", "80")]
nodes = {name: graph.newItem(name) for name in sources}
for source, target, port in connections:
newlink = graph.newLink(nodes[source], nodes[target])
graph.propertyAppend(newlink, "label", port)
with open("foo.dot", "w") as outfile:
graph.dot(outfile)
os.popen(f"dot -Tpng foo.dot -ofoo.png")
最近我倾向于 GvGen,因为我上周浪费了半个小时试图让 PyGraphviz 安装在最终用户的计算机上。我花了我的周末用 GvGen 替换 PyGraphviz,我想我将来会这样。如果您只是在自己的计算机上运行它,那么 pygraphviz 很好而且很简单。您将立即知道它是否易于安装。