snyk.io/advisor/pythonsnyk.io/advisor/python

無論是工作或個人的開發,在為專案實作新的功能時,一個需求可能會有複數個套件選項可供選擇。這時候如何取捨,需要考慮的因素很多,而套件的「健康度」無疑是重要指標之一。

在 Python 中,這些套件幾乎都是開源的,而 Snyk Open Source Advisor(以下簡稱:Snyk Advisor)就是一個幫助你查詢、確認開源專案健康度的服務!

採用一個缺乏維護者與使用者的開源套件,可能會讓後續的開發付出代價,如果存在涉及資安的 bug,那麼最壞的情況恐怕不止是砍掉重練而已。(這段話聽起來好像廣告業配的台詞 🤣)

所以,在研究新功能的實踐而必須採用新的套件時,只要不是公認的主流選項,或是我不熟悉的領域,我一定會去這個網站查一下套件的健康度。依照網站的計算公式,專案更新愈頻繁、社群活躍度愈高、愈多人採用,健康度就愈高。

我會以它給出的健康度分數,來決定是否採用一個新套件。

舉例而言,當 Django 專案想要以 ORM 方式存取 MongoDB 資料時,就需要能有支援 MongoDB ORM 的套件(package)。依照 MongoDB 官方的文件說明,最常見的三種選擇如下:

  1. PyMongo
  2. MongoEngine
  3. Djongo

其中 PyMongo 是後二者的底層依賴套件,一定會安裝,可以忽略不計。

因為是 Web 開發,我們實際需要的是類似 Django ORM 的 Object-Document Mapper 框架,後兩者都符合這個要求,所以得要從選項 2、3 中選擇其一。

選擇的時候,需要考慮專案的具體需求、整合成本、套件通用性等重要方向,當然也包括套件本身的健康度

如果套件專案健康度不到 80 分,除非只是個人開發且別無選擇,否則我基本不考慮!

此時用 Snyk Advisor 查了一下,MongoEngine 得分為優秀的 94 分,而 Djongo 僅得到 71 分,單憑這個指標,我顯然就不會選擇 Djongo 了——至於它這個「充滿巧思」的套件命名,我實在不忍吐槽 😅

除了 Python,Snyk Advisor 還支援 Node.jsGo 以及 Docker(可用來查詢 image 的健康度)。

總之,非常推薦使用 Snyk Advisor,作為專案開發時的套件選擇參考