讀後筆記:uv 為何能比 pip 快一個量級?設計比語言更重要

本篇文章更新時間:2025/12/27
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


uv 為什麼能快到嚇人?一篇理解 Python 新世代套件管理器的深度筆記

編輯前言:這篇文章來自 How uv got so fast,作者解析了 uv 為什麼能比 pip 快上十倍以上。讀完後我最大的感想是:真正拉開差距的不是 Rust,而是「更乾淨的生態標準」與「敢砍敢捨」的產品設計。

核心觀點 (Key Takeaways)

  • uv 的速度來自一系列新 PEP 標準(特別是 PEP 518、517、621、658)所提供的「可靜態分析的 metadata」。
  • uv 故意不支援大量 pip 的歷史包袱,讓快路徑成為預設路徑。
  • 很多關鍵優化其實 pip 也做得到,但 pip 背負太多相容需求而無法取捨。

深入解析

原文一開始就破題:uv 不是因為「Rust 所以快」,而是 Python 打包生態直到 2023 年才真正具備可讓工具變快的基礎。過去依賴 setup.py 的設計讓 pip 必須「執行程式碼才能知道依賴」,導致每次安裝都像是在跑一組不確定的指令鏈。

“You couldn’t know a package’s dependencies without running its setup script.”

1. 新 PEP 標準解開歷史枷鎖

原文非常精準地指出四個關鍵 PEP:

  • PEP 518:引入 pyproject.toml,第一次讓「建置依賴」可以以靜態方式揭露。
  • PEP 517:讓前端工具不必理解 setuptools 內部。
  • PEP 621:統一專案 metadata,依賴列表變成純資料,不需執行程式碼。
  • PEP 658:把 metadata 直接放在 repository API,可在不下載 wheel 的情況讀取依賴。

這些標準在 2023 年前根本沒完全落地,所以 uv 在 2020 年是不可能存在的。這也是為什麼 Rust 並非主因,因為真正改變遊戲規則的是「生態願意標準化」。

2. uv 的速度來自它敢直接丟掉很多東西

這一段我看得非常有感。uv 的 compatibility list,本質上就是一張「我們不做 pip 在做的所有事」的清單。

像是:

  • 不支援 .egg
  • 不讀 pip.conf
  • 預設不編譯 .pyc
  • 必須在虛擬環境中使用
  • 對規範更嚴,包不合法就拒絕
  • 忽略 requires-python 的 upper bound
  • 多重索引時只採第一個索引(避免 dependency confusion)

每一項都是 pip 不能輕易砍掉的歷史包袱,而 uv 就靠著這些刪減,把大量慢路徑完全移除。

3. 很多 uv 的優勢,其實不用 Rust pip 也能做

我特別喜歡原文這段拆解,因為它讓我重新思考「語言 vs 設計」的比例:

  • 多工下載
  • HTTP range request 讀取 wheel metadata
  • 全域 cache + hardlink
  • 解析 metadata 不用啟動 Python
  • PubGrub 依賴解析器

這些 pip 理論上都可以做,只是會造成相容性斷裂,所以一直沒辦法全面導入。

4. Rust 真正能提供的,是細節層級的優化

例如零拷貝反序列化(rkyv)、無鎖資料結構、單一編譯後可執行檔、u64 版本號壓縮。這些確實漂亮,但貢獻的是額外的 10~20% 的效能,而不是十倍的差距。

筆者心得與啟發

讀完原文,我最大的感觸是:uv 的成功更像是「生態標準更新後,第一個敢徹底擺脫歷史負債的工具」的勝利。Rust 讓它更俐落,但本質是 Python 打包生態終於走到了「可靜態分析」的時代。

在產品設計上,uv 最值得學習的地方是:

  • 它不是盲目相容,而是勇敢地定義「我們支援的是現代 Python 生態」。
  • 它的快來自於讓 99% 的情況都走快路徑,而不是去加速慢路徑。
  • 它的取捨極度清楚,沒有妥協。

如果你正在設計工具,這篇文章給我兩個啟發:

  1. 加入新功能比刪除舊功能容易太多,但真正的速度來自刪除。
  2. 語言可以帶來額外優化,但架構設計才是決定級差異因素。

讀完只會讓人更期待舊生態刷新後的新工具還會帶來哪些驚喜。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon