静态分析并提取相同 Python 库的两个版本之间的差异

Static analyse and extract the difference between two versions of same Python Library

我正在做一个研究项目,目的是检测 Python 库升级带来的重大变化。其中一个步骤是通过使用静态分析(Coule 是否基于 AST)提取相同 Python 库的两个主要版本之间的差异,以便对更改模式进行分类。检测不仅要发现与 .py 文件的差异,还应发现与其他项目文件(包括配置文件、资源等)的差异。理想情况下,还应包括将 .py 文件移动到另一个模块等场景。所以我在这里有两个问题:

  1. 有没有工具可以做类似的工作,还支持灵活配置分析?
  2. 如果不是,搜索这种差异并确定这种差异的类别(例如变量、函数等)的最佳策略是什么

抱歉,这可能是一个愚蠢的问题,我不是来自 Python 背景,真的 运行 没有想法。欢迎任何想法、想法和意见。提前致谢。

在这里随便说说一些想法:

  1. 我认为我不会如此担心预先检测源文件中的更改。有很多方法可以在不更改模块接口的情况下在文件之间移动代码。例如,您可以将所有代码放在 __init__.py 中,或者,您可以将其拆分为任意数量的文件和子目录。但是,编程界面将保持不变。

  2. 相反,您可以使用 dir() built-in 来检测模块中 public 类 和方法的变化。这适用于使用命名参数的库,但不适用于仅使用 def func(*args, **kwargs) 的函数(这就是为什么应该避免这种情况,所有以前的 perl 程序员!)

  3. 如果模块使用新的类型提示,您确实可以从检测类型变化中受益匪浅。如果您使用一些实际解析 python 并推断类型的工具,那也可以。我猜 VSCode 可能包含这样一个库,它用来提供 context-sensitive 帮助。