Skip to main content

Python LSP 全面比較

也許你該試試別的 Python LSP。

什麼是 LSP​

LSP(Language Server Protocol)是一個標準化協議,讓編輯器和語言分析工具之間可以溝通,幫你做自動補全、型別提示、go-to-definition、hover 顯示型別資訊等工作。它不只影響補全速度,更包含型別推斷的準確度,以及 CI 的型別檢查結果是否和編輯器一致。

TL;DR​

  • Pydantic / Django / PyTorch 專案:Pyrefly,有內建支援其他工具沒有
  • VS Code + Copilot 用戶不想動:Pylance/Pyright
  • 非 VS Code 但習慣 Pyright:basedpyright
  • Astral 工具鏈(uv + ruff)用戶:ty,但還在 beta

通用選擇是 Pyrefly,穩定、功能完整、有大規模生產驗證。

工具說明​

Pylance​

Pylance 是 Microsoft 維護的 VS Code 擴充套件,閉源,底層使用 Pyright 引擎,也是目前用戶基數最大的選項,Copilot 的型別資訊就是從這裡來的。

最大問題是強制綁定開源的 VS Code,使用自有的 stubs,這就導致 VS Code 裡面沒有 error(開源,因此不包含 stubs),CI 卻有錯誤。

Pyrefly​

Meta 的產品,Rust 寫的,已經經過 Instagram 兩千萬行 Python codebase 的考驗,PyTorch 和 JAX 也採用。

效能比 Mypy/Pyright 快 15 倍以上,還包含獨有的框架整合功能:

  • Pydantic:不需要插件,直接理解 BaseModel 的型別行為,包括 lax/strict validation mode
  • Django:理解 model relationships 和 fields
  • Tensor Shape tracking:可以靜態追蹤 PyTorch 的 tensor dimension,IDE 顯示 Tensor[B, T, NEmbedding]

甚至附帶遷移工具幫助你從其他 LSP 轉過去。風險是 Meta 的開源投入歷史上不穩定,你在 hacker news 可以看到對 Meta 開源專案的抱怨(抱怨 Meta 內部如果沒問題就不會管開源社區的意見),但 Instagram 把生產環境押在上面是最強的綁定。

目前開發狀態極度活躍,commit 頻率碾壓在場所有對手。

ty​

Astral 的產品,和 ruff / uv 同一個團隊,Rust 寫的,速度和 Pyrefly 伯仲之間,現在處於非穩定版本隨時會有 breaking change,可以在個人專案試用,等 1.0.0 再評估是否遷移。

由於對 uv/ruff 的好印象,我想應該非常多人對他抱有期待,並且以我對 Astral 的觀察,他們非常願意傾聽開源社群的聲音,不需要擔心 Meta 開源但是不理你的那種問題。

Pyright standalone​

Pylance 的開源底層引擎,可以在 VS Code 以外使用。

我對他沒有太多理解,因此不隨便評論。

basedpyright​

Pyright 的社群 fork,核心賣點是把 Pylance 的閉源功能重新實作進開源 LSP,包括 inlay hints、semantic token highlighting、import suggestion 等。

開源的 Zed editor 也把他設為預設 LSP,但是風險是個人維護,穩定性不如有公司的 Pyrefly 或 ty。

pylsp / jedi-language-server​

舊世代工具,Python 寫的。

pylsp 沒用過不隨便評價,jedi 筆者用過,基本上就是綁 spyder,沒有什麼功能網路上也沒什麼相關資訊。

結語​

Pyrefly/ty 都是用 Rust 寫的新工具,最新速度也最快,Pyrefly 帶有獨家功能,ty 功能完整不過沒有獨家功能,也還在開發階段。

Pylance 是 VS Code 內建的 LSP,和 Pyright/basedpyright 都是同一系列的東西。

pylsp/jedi 很老了,網路上也沒有太多相關討論。jedi 的開發者也寫了全新的 LSP 叫 zuban,不過單人開發,使用風險更大,也不是 basedpyright 這種 fork 出來的,因此沒有列在上面。