当前位置: 首页 > 面试题库 >

在Python中创建依赖性图

陈正业
2023-03-14
问题内容

我继承了一个巨大的代码库,需要对其进行一些小的更改。我想知道是否有实用程序可以解析python代码并提供函数之间的依赖关系,就像我对函数进行更改一样,我想确保自己不会破坏其他函数,因此,如果我能在图表中看到它,会让我的生活更轻松。


问题答案:
  • 通常,“依赖性”是为模块/包导入定义的。
  • 您正在寻找的是可视化的呼叫流程。

    • http://pycallgraph.slowchop.com/
    • 您仍然不能保证不会破坏功能:)
  • 我的经验和解决方案:

很多时候,我发现呼叫流数据不堪重负,并且图表过于复杂。所以我通常要做的是对该功能感兴趣的跟踪调用流程。

这是通过利用sys.settrace(…)函数完成的。在将调用流生成为文本数据之后,我使用graphviz生成了一个调用图。

* [http://docs.python.org/library/sys.html](http://docs.python.org/library/sys.html)
* [通话追踪](http://pyfunc.blogspot.com/2010/10/tracing-callflows-in-python.html)
* 要生成图,请使用[networkX的](http://networkx.lanl.gov/pygraphviz/)graphviz解决方案。

[编辑:基于评论]

然后,我的零散解决方案会更好。只需插入代码,然后在要跟踪的函数上使用装饰器即可。您会看到延迟出现的差距,但是可以解决。您不会直接获得完整的图片。

我一直在努力做到这一点,并发表了一些关于这种理解的文章。



 类似资料:
  • Q1我如何在LibA中包含依赖项,这样当一些其他项目包含这个库时,它就不应该担心我的库的内部依赖项。 Q3当某人包含一个来自jcenter的库时,是否会带来所有的依赖关系? 任何帮助都将非常感谢。:)

  • 我希望它会按照一、二、三、四的顺序执行。但它是在并行模式下运行的。 以上代码的输出:

  • 我试图不去增加很复杂的结构代码,保持简洁可测试性的代码和好的实践,我想我应该用Kotlin从其它方面去简化代码。如果你想了解一些控制反转或者依赖注入的话题,你可以查看我关于Android中使用Dagger注入的一系列文章。第一篇文章有关于他们这个团队的简单描写。 一种简单的方式,如果我们想拥有一些独立于其他类的类,这样更容易测试,并编写代码,易于扩展和维护,这时我们需要使用依赖注入。我们不去在类内

  • 我已经创建了一个包,通过导入其他程序员的代码来供他们使用。我的程序使用其他jar文件进行XML解析,我不想让其他人担心依赖关系,什么是确保我的jar文件总是获得它的依赖关系的最佳方法? 是否应在原始JAR中包含依赖项? 有其他方法吗?

  • 我有一个库,我称之为,它是另一个项目的依赖项,名为。在的构建中。gradle,我正在使用,它以如下方式指定为依赖项: 这很有效-已编译。但是,当我在我的项目中使用它时,我得到了以下内容: <code>生成。的gradle如下所示: 可能这是因为库在,但它没有正确的位置来搜索Maven存储库。有没有一种方法可以使这些搜索位置以及依赖关系本身变得短暂?

  • 问题内容: 目前,我有一种方法可以根据给定的String充当工厂。例如: 我要做的是避免在类列表增加时出现整个if-else问题。我想我需要有两种方法,一种将Strings注册到类中,另一种基于操作的String返回类。 用Java做到这一点的一种好方法是什么? 问题答案: 在打开字符串之前,您所做的可能是最好的方法。( 编辑2019: 可以打开字符串-使用它。) 您可以创建工厂对象以及从字符串到

  • 问题内容: 我有两个文件和,分别定义了两个类和。 直到今天,用于引用该对象的定义,因此我已经做了 在文件中。 但是,到目前为止,我已经为引用该对象的对象创建了一个新方法。 尝试导入时遇到了问题:我尝试了一下,当程序运行并调用了using的方法时,出现了一个未定义的异常。 我该怎么办? 问题答案: 导入Python模块 是一篇很棒的文章,介绍了Python中的循环导入。 解决此问题的最简单方法是将路