在我的当前工作环境中,我们为内部使用生产大量的Python软件包(10个甚至100个)。每个软件包都有一些依赖项,通常是对内部和外部软件包的混合依赖,并且其中一些依赖项是共享的。
随着我们接近依赖地狱,更新依赖项变成了一个耗时的过程。虽然我们关心新版本可能引入的功能更改,但同样重要(如果不是更重要的话)的是API更改会破坏代码。
尽管针对依赖项的较新版本运行单元/集成测试有助于我们捕获一些问题,但我们的覆盖率还不足以使其成为强大的策略。发布说明和更改日志有助于在高级别上识别主要更改,但这些很少适用于内部开发的工具或者没有足够详细的信息来理解新版本对(公共)API的影响。
我正在寻找其他自动化此过程的方法。
我希望能够自动比较两个 Python 包的版本,并报告它们之间的 API 差异。特别是包括不兼容的更改,如删除函数/方法/类/模块、向函数/方法/类添加位置参数和更改函数/方法返回项的数量。作为开发人员,基于生成的报告,我应该对此版本更改将引入的代码级影响有更深入的了解,因此需要的整合时间也更长。
在其他地方,我们使用 C++ abi-compliance-checker 并正在研究 Java api-compliance-checker 来帮助完成此过程。是否有类似的工具可用于 Python?我找到了很多 lint/analysis/refactor 工具,但没有提供这种功能水平的工具。我理解 Python 的动态类型使得全面报告不可能。
如果不存在这样的工具,是否有任何库可以帮助实现解决方案?例如,我的当前方法是使用ast.NodeVisitor遍历包并构建树,其中每个节点表示一个模块/类/方法/函数,然后将此树与同一包的另一个版本的树进行比较。 编辑:发布问题后,我发现pysdiff符合我的一些要求,但仍然对其他选择感兴趣。 编辑:还发现Upstream-Tracker是我想要最终得到的信息类型的很好的例子。
随着我们接近依赖地狱,更新依赖项变成了一个耗时的过程。虽然我们关心新版本可能引入的功能更改,但同样重要(如果不是更重要的话)的是API更改会破坏代码。
尽管针对依赖项的较新版本运行单元/集成测试有助于我们捕获一些问题,但我们的覆盖率还不足以使其成为强大的策略。发布说明和更改日志有助于在高级别上识别主要更改,但这些很少适用于内部开发的工具或者没有足够详细的信息来理解新版本对(公共)API的影响。
我正在寻找其他自动化此过程的方法。
我希望能够自动比较两个 Python 包的版本,并报告它们之间的 API 差异。特别是包括不兼容的更改,如删除函数/方法/类/模块、向函数/方法/类添加位置参数和更改函数/方法返回项的数量。作为开发人员,基于生成的报告,我应该对此版本更改将引入的代码级影响有更深入的了解,因此需要的整合时间也更长。
在其他地方,我们使用 C++ abi-compliance-checker 并正在研究 Java api-compliance-checker 来帮助完成此过程。是否有类似的工具可用于 Python?我找到了很多 lint/analysis/refactor 工具,但没有提供这种功能水平的工具。我理解 Python 的动态类型使得全面报告不可能。
如果不存在这样的工具,是否有任何库可以帮助实现解决方案?例如,我的当前方法是使用ast.NodeVisitor遍历包并构建树,其中每个节点表示一个模块/类/方法/函数,然后将此树与同一包的另一个版本的树进行比较。 编辑:发布问题后,我发现pysdiff符合我的一些要求,但仍然对其他选择感兴趣。 编辑:还发现Upstream-Tracker是我想要最终得到的信息类型的很好的例子。