我知道已经围绕该主题进行了各种讨论,但是我有一个具体的,略有不同的问题(我发现大多数现有问题都集中在其他包装的外部(相互)依赖性上,而我的兴趣主要在我自己的直接包装中) 。
我发现了多种工具,可帮助查找和可视化相互依存关系:
pycallgraph:http://pycallgraph.slowchop.com/en/master/
蛇食:http://furius.ca/snakefood/
modulegraph:http://pythonhosted.org/modulegraph/
我使用的问题是它们显示了所有模块的所有依赖关系,而我真的很想关注我自己的内部依赖关系以及每个模块的“第一个”外部依赖关系。举个例子:我在很多地方都使用了pandas和scipy,所以我想看看那些被引用的东西,而不是那些包对其他东西的内部结构和依赖关系。您可以想象那些给了我无法控制的其他依赖项,因此也不是我的直接利益。
Pycallgraph确实可以工作,但是它给出的巨大结果使我感兴趣的总依赖关系中的一小部分模糊了。有人有没有指针?我需要自己构建一些更简单的东西还是忽略一些东西?
谢谢你的帮助!
编辑:
所以pycallgraph对我来说不是很方便,因为它可以通过执行东西来真正起作用。 modulegraph的问题在于(也如评论中所述)它创建了这个巨大的点文件(9000行)。但是(argh)它不提供对同一包级别的模块的依赖。因此,如果您的软件包“ main”的模块为“ a”,“ b”,“ c”,而软件包“ main.file_import”的模块为“ x”,“ y”,“ z”,则会在“ main”和“ main.file_import”。这不是我想要的,因为我试图弄清楚是否应重构实际结构(在模块上以及在函数/类级别上)。找到或为此创建好的解决方案时,我将继续在此处添加内容。我曾以为这是一个普遍的问题。
最佳答案
在pycallgraph上,我得到了一些有用的东西,基本上与您的观点相同。
hack pycallgraph将中间点文件保存在您可以看到的地方。
运行egrep -v
修剪点中不需要的内容。例如,在此处可以剥离所有logging
调用。
运行gvpr
,这是graphviz
附带的DOT操纵实用程序,用于选择您感兴趣的节点。
概念代码的基本证明位于https://gist.github.com/jpeyret/33739f6cd99f6108ad5046bd47df5a16
关于python - 包中的Python依赖项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20829697/