Joh*_*y19 15 python dependencies graph
我想知道python是否有一些内置库(或网上的任何库..)那将为我创建一个依赖图?我有一个这样格式的文件
A::Requires = ""
B::Requires = A
C::Requires = B
H::Requires = A
AA::Requires = ""
BB::Requires = AA
C::Requires = B
CC::Requires = BB
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望有像这样的树:
A
+-B
+-C
+-H
AA
+-BB
+-CC
Run Code Online (Sandbox Code Playgroud)
所以基本上是一个lib,我将提供一个元组(A,B)或(A,H),它将为我构建树?如果这样的lib不存在,那么实现类似的东西会更简单吗?
谢谢
The*_*eke 15
假设您输入的内容以字符串形式给出raw:
import networkx as nx
import re
regex = re.compile(r'^([A-Z]+)::Requires\s+=\s([A-Z"]+)$')
G = nx.DiGraph()
roots = set()
for l in raw.splitlines():
if len(l):
target, prereq = regex.match(l).groups()
if prereq == '""':
roots.add(target)
else:
G.add_edge(prereq, target)
Run Code Online (Sandbox Code Playgroud)
现在打印树:
for s in roots:
print s
spacer = {s: 0}
for prereq, target in nx.dfs_edges(G, s):
spacer[target] = spacer[prereq] + 2
print '{spacer}+-{t}'.format(
spacer=' ' * spacer[prereq],
t=target)
print ''
Run Code Online (Sandbox Code Playgroud)
这打印:
A
+-H
+-B
+-C
AA
+-BB
+-CC
Run Code Online (Sandbox Code Playgroud)
这要求通过所有根来呈现root::Requires = "",以便它们被识别.
Bel*_*gor 13
试试其中一个:
graph-tool很难安装(它需要大量的内存用于编译,我认为它大约有5GB的RAM和大约12小时的编译).
networkx相当不错.
igraph从他们的页面引用:igraph是一个免费的软件包,用于创建和操纵无向和有向图.它包括经典图形理论问题的实现,如最小生成树和网络流,并且还实现了一些最近的网络分析方法的算法,如社区结构搜索.
我一直在使用它们.这实际上取决于你究竟需要什么.如果你需要它们的东西就像依赖项一样简单,那么你要使用哪一个并不重要,不过,如果你需要更短更轻的东西,我会建议你使用avoud graph-tool.
| 归档时间: |
|
| 查看次数: |
27403 次 |
| 最近记录: |