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 但習慣 Pyrightbasedpyright
  • 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 出來的,因此沒有列在上面。