静态分析并提取相同 Python 库的两个版本之间的差异
Static analyse and extract the difference between two versions of same Python Library
我正在做一个研究项目,目的是检测 Python 库升级带来的重大变化。其中一个步骤是通过使用静态分析(Coule 是否基于 AST)提取相同 Python 库的两个主要版本之间的差异,以便对更改模式进行分类。检测不仅要发现与 .py 文件的差异,还应发现与其他项目文件(包括配置文件、资源等)的差异。理想情况下,还应包括将 .py 文件移动到另一个模块等场景。所以我在这里有两个问题:
- 有没有工具可以做类似的工作,还支持灵活配置分析?
- 如果不是,搜索这种差异并确定这种差异的类别(例如变量、函数等)的最佳策略是什么
抱歉,这可能是一个愚蠢的问题,我不是来自 Python 背景,真的 运行 没有想法。欢迎任何想法、想法和意见。提前致谢。
在这里随便说说一些想法:
我认为我不会如此担心预先检测源文件中的更改。有很多方法可以在不更改模块接口的情况下在文件之间移动代码。例如,您可以将所有代码放在 __init__.py
中,或者,您可以将其拆分为任意数量的文件和子目录。但是,编程界面将保持不变。
相反,您可以使用 dir()
built-in 来检测模块中 public 类 和方法的变化。这适用于使用命名参数的库,但不适用于仅使用 def func(*args, **kwargs)
的函数(这就是为什么应该避免这种情况,所有以前的 perl 程序员!)
如果模块使用新的类型提示,您确实可以从检测类型变化中受益匪浅。如果您使用一些实际解析 python 并推断类型的工具,那也可以。我猜 VSCode 可能包含这样一个库,它用来提供 context-sensitive 帮助。
我正在做一个研究项目,目的是检测 Python 库升级带来的重大变化。其中一个步骤是通过使用静态分析(Coule 是否基于 AST)提取相同 Python 库的两个主要版本之间的差异,以便对更改模式进行分类。检测不仅要发现与 .py 文件的差异,还应发现与其他项目文件(包括配置文件、资源等)的差异。理想情况下,还应包括将 .py 文件移动到另一个模块等场景。所以我在这里有两个问题:
- 有没有工具可以做类似的工作,还支持灵活配置分析?
- 如果不是,搜索这种差异并确定这种差异的类别(例如变量、函数等)的最佳策略是什么
抱歉,这可能是一个愚蠢的问题,我不是来自 Python 背景,真的 运行 没有想法。欢迎任何想法、想法和意见。提前致谢。
在这里随便说说一些想法:
我认为我不会如此担心预先检测源文件中的更改。有很多方法可以在不更改模块接口的情况下在文件之间移动代码。例如,您可以将所有代码放在
__init__.py
中,或者,您可以将其拆分为任意数量的文件和子目录。但是,编程界面将保持不变。相反,您可以使用
dir()
built-in 来检测模块中 public 类 和方法的变化。这适用于使用命名参数的库,但不适用于仅使用def func(*args, **kwargs)
的函数(这就是为什么应该避免这种情况,所有以前的 perl 程序员!)如果模块使用新的类型提示,您确实可以从检测类型变化中受益匪浅。如果您使用一些实际解析 python 并推断类型的工具,那也可以。我猜 VSCode 可能包含这样一个库,它用来提供 context-sensitive 帮助。