包中的Python依赖项

时间:2013-12-29 20:23:46

标签: python

我知道围绕这个主题有各种各样的讨论,但我有一个特定的,略有不同的问题(我发现的大多数现有问题都集中在其他包装的外部(相互依赖)上,而我的兴趣主要在于我自己的问题。直接包装。)

我找到了各种有助于找到和找到的工具。可视化相互依赖性:

我使用的问题是它们显示所有所有模块的依赖关系,而我真的想关注我自己的内部依赖关系以及每个模块的“第一个”外部依赖关系。举个例子:我使用熊猫和熊猫scipy在很多地方,所以我希望看到那些引用,但不是这些包的内部结构和依赖关系在其他东西。你可以想象那些不受我控制的大量其他依赖项,因此不符合我的直接利益。

Pycallgraph确实有效,但是它提供了巨大的结果,混淆了我感兴趣的总依赖项中的一小部分。有没有人有任何指针?我需要自己构建一些更简单的东西,还是我忽略了什么?

谢谢你的帮助!

编辑:

所以pycallgraph对我来说并不是很方便,因为它确实可以通过执行来实现。 modulegraph的问题在于(如评论中所述)它创建了这个巨大的点文件(9000行)。但是(argh)它不会在同一个包级别上提供对模块的依赖。因此,如果你的软件包“main”包含模块“a”,“b”,“c”和带有“x”,“y”,“z”的“main.file_import”,它会在“main”和“main”之间产生依赖关系。 main.file_import”。这不是我正在寻找的,因为我试图弄清楚是否应该重新考虑实际结构(在模块和功能/类级别)。当我找到或为此创建一个好的解决方案时,我会继续在这里添加内容。我曾经认为这是一个常见的问题。

2 个答案:

答案 0 :(得分:1)

Snakefood可以限制它将绘制的依赖关系:http://furius.ca/snakefood/doc/snakefood-doc.html#restricting-dependencies

您也可以使用群集对同一个包中的所有依赖项进行分组(例如,只显示一次pandas):http://furius.ca/snakefood/doc/snakefood-doc.html#filtering-and-clustering-dependencies

如果您打算过滤输出,那么Snakefood也是一个不错的选择,因为它为每个处理阶段输出数据。

答案 1 :(得分:1)

对于pycallgraph,我最终得到了一些有用的东西,与你基本相同。

  1. hack pycallgraph将中间文件保存在您可以看到的地方。

  2. 运行egrep -v以删除您不关心的内容。例如,您可以在此处删除所有logging次来电。

  3. 运行gvpr,这是graphviz附带的DOT操作实用程序,用于选择您感兴趣的节点。

  4. 概念代码的基本证明在https://gist.github.com/jpeyret/33739f6cd99f6108ad5046bd47df5a16