在我目前的工作環境中,我們生產大量供內部使用的Python包(如果不是100s,則爲10s)。每個軟件包都有一些依賴關係,通常是內部和外部軟件包的混合體,其中一些依賴關係是共享的。Python API兼容性檢查器
當我們接近dependency hell時,更新依賴關係成爲一個耗時的過程。雖然我們關心新版本可能引入的功能更改,但同等(如果不是更多)重要的是破壞代碼的API更改。
雖然針對較新版本的依賴項運行單元/集成測試有助於我們發現一些問題,但我們的覆蓋率還不足以達到100%,因此無法實現這一穩健策略。發行說明和更改日誌可幫助識別高級別的主要更改,但這些更改很少存在於內部開發的工具中,或者詳細瞭解新版本對(公共)API的影響。
我正在看其他方面來自動執行此過程。
我希望能夠自動比較兩個版本的Python軟件包並報告它們之間的API差異。特別是,這將包括向後不兼容的更改,例如刪除函數/方法/類/模塊,向函數/方法/類添加位置參數以及更改函數/方法返回的項目數。作爲一名開發人員,基於此報告生成的報告,我應該更深入地瞭解此版本更改將引入的代碼級別影響,因此需要整合它。
在其他地方,我們使用C++ abi-compliance-checker並正在尋找Java api-compliance-checker來幫助完成此過程。是否有類似的工具可用於Python?我發現了很多皮棉/分析/重構工具,但沒有提供這種級別的功能。我知道Python的動態輸入將會使綜合報告變得不可能。
如果這樣的工具不存在,他們是否可以幫助實施解決方案的任何庫?例如,我目前的方法是使用ast.NodeVisitor來遍歷包並構建一個樹,其中每個節點表示一個模塊/類/方法/函數,然後將該樹與另一個版本的樹相比較,以查找相同的包。
編輯:自發布問題我發現pysdiff其中涵蓋了我的一些要求,但有興趣看到替代品。
編輯:也找到了Upstream-Tracker這是我想結束的那種信息的一個很好的例子。
這種方法看起來相當簡單,並且很容易擴展到覆蓋types.ClassType和types.MethodType等。但我寧願不必導入正在檢查的模塊(我應該把它放在原始問題中)。我認爲靜態分析會更好,因爲它簡化了比較的運行時環境(例如,我認爲pylint是這樣工作的)。 –