UV:基於 Rust 的超高速 Python 包管理工具

作者: Calpa Liu
字數:1708
出版:2025 年 3 月 15 日
分類: 技術分享 後端開發 Python
在當前 Python 生態系統中,包管理一直是開發者面臨的痛點之一。多種工具分散使用,效率低下,安裝依賴時常需等待漫長時間。今天,我們將介紹一個革命性的解決方案——UV(及其命令行工具 UVX),這是一個用 Rust 編寫的極速 Python 包管理器,正在迅速改變 Python 開發者的工作流程。

UV 是一個用 Rust 編寫的全功能 Python 包和項目管理器,其目標是取代多種現有工具,包括 pip、pip-tools、pipx、poetry、pyenv、twine 和 virtualenv 等。它不僅提供了這些工具的功能,而且速度快 10-100 倍。

UV 的主要特點包括:

  • 統一的鎖文件:提供全面的項目管理能力
  • 腳本運行:支持內聯依賴元數據
  • Python 版本管理:安裝和管理不同的 Python 版本
  • 工具管理:通過 UVX(UV tool run 的別名)運行和安裝以 Python 包形式發布的工具
  • 高度相容:提供與 pip 相容的界面,讓使用者能夠順利過渡
  • 工作區支持:支持類似 Cargo 的工作區,適合可擴展項目
  • 空間效率:全局緩存實現依賴項去重
  • 跨平台:支持 macOS、Linux 和 Windows

UVX:即用即走的工具執行器

UVX 是 UV 工具集中的一個特別實用的功能,它本質上是uv tool run的別名。它允許開發者在不永久安裝的情況下執行 Python 工具。例如,要運行 Ruff(一個 Python 代碼檢查工具):

$ uvx ruff

這個命令會在一個臨時的、隔離的環境中安裝和執行 Ruff,不會影響當前項目或系統環境。這對於偶爾使用的工具特別有用,避免了不必要的環境污染。

為何 UV 比其他 Python 包管理工具快得多?

UV 之所以能達到驚人的速度提升(比 pip 快 10-100 倍),主要歸功於以下幾點:

  1. Rust 的高性能特性:Rust 作為一種系統級編程語言,提供了接近 C/C++ 的性能表現。
  2. 優化的架構設計:UV 的架構、設計決策和優化專注於性能,包括分配器、並發處理和零拷貝技巧。
  3. 並發處理能力:利用 Rust 優秀的並發模型加速依賴解析和下載過程。
  4. 更高效的依賴解析算法:使用更快的算法來解析依賴關係圖。
  5. 全局緩存機制:通過智能緩存減少重複下載和安裝。

Python 包管理長期以來一直面臨著效率低下的問題。正如一位開發者指出的:“一個理想的包管理應該像 Rust 的 Cargo 那樣工作,簡單而高效”。UV 正是受到這種理念的啟發,帶來了 Python 世界急需的效率提升。

為何選擇 Rust 構建開發工具?

越來越多的開發工具,包括 UV,選擇使用 Rust 構建,這一趨勢並非偶然。根據搜索結果,我們可以歸納出以下原因:

安全性與性能的完美結合

長期以來,開發者們認為安全性和性能是一對難以調和的矛盾體。C 和 C++ 提供了極高的性能,但容易出現內存洩漏和安全問題;而其他高級語言雖然更安全,但往往犧牲了性能。

Rust 打破了這一傳統觀念,它通過獨特的所有權系統實現了內存安全,同時保持接近 C/C++ 的性能水平。這種兼顧安全和性能的特性使其成為構建開發工具的理想選擇。

內存安全無需垃圾回收

Rust 的所有權系統確保在編譯時就能驗證內存安全,無需運行時的垃圾回收機制。這意味著用 Rust 構建的工具不僅執行效率高,而且極少出現崩潰或安全漏洞。

對於像包管理器這樣需要處理大量依賴關係、執行複雜解析算法的工具來說,這種特性尤其重要。UV 能夠安全地處理複雜的依賴圖,同時保持極高的效率。

並發處理更簡單

Rust 的並發模型使並行處理更加安全和簡單。在包管理過程中,能夠安全地並行下載和處理多個依賴項是提高效率的關鍵因素之一。UV 利用 Rust 的這一優勢,實現了多個依賴包的並行處理。

豐富的生態系統與現代工具鏈

Rust 擁有一個成熟的包管理器 Cargo 和豐富的生態系統。開發者可以輕鬆地使用現有的庫和框架來加速開發過程。UV 的開發者利用這一優勢,創建了一個既高效又功能齊全的工具。

開始使用 UV

UV 的安裝非常簡單,提供了多種安裝方法:

使用獨立安裝器

$ curl -LsSf https://astral.sh/uv/install.sh | sh

或者使用 wget:

$ wget -qO- https://astral.sh/uv/install.sh | sh

通過 PyPI 安裝

$ pipx install uv

或者:

$ pip install uv

其他安裝方法

UV 還支持通過 Homebrew、WinGet、Scoop、Docker 或 GitHub Releases 安裝。例如,使用 Homebrew:

$ brew install uv

基本使用

安裝完成後,可以用 UV 來管理項目依賴:

$ uv init example
$ cd example
$ uv add ruff
$ uv run ruff check

要使用 UVX 運行工具,只需:

$ uvx pycowsay 'hello world!'

numpy 安裝示例

$ uv add numpy

然後你就可以使用 numpy 了:

import numpy as np

print(np.__version__)

UV 在 Docker 中的應用

UV 提供了多種 Docker 映像,支持在容器化環境中使用。這對於 CI/CD 流程和確保構建環境一致性特別有用。

可以使用預安裝 UV 的映像:

$ docker run --rm -it ghcr.io/astral-sh/uv:debian uv --help

或者將 UV 二進制文件複製到自己的映像中:

FROM python:3.12-slim-bookworm
COPY --from=ghcr.io/astral-sh/uv:0.6.6 /uv /uvx /bin/

結論:Python 包管理的未來

UV 代表了 Python 包管理的未來發展方向。通過利用 Rust 的速度和安全性,它解決了傳統 Python 包管理工具面臨的主要問題。自 2024 年 2 月發布以來,UV 已經獲得了顯著的採用,每月下載量超過一千萬次並持續增長。

這種趨勢也反映了更廣泛的技術轉變:越來越多的開發工具選擇使用 Rust 構建,以獲得更好的性能和安全性。就像 Mozilla、Dropbox 和 Amazon 等公司已經開始在關鍵系統中使用 Rust 一樣,Python 生態系統也開始從 Rust 的優勢中受益。

對於 Python 開發者而言,UV 提供了一個絕佳的機會,可以顯著提高工作效率,簡化包管理流程,加快項目開發速度。無論是個人開發者還是企業團隊,都值得考慮將 UV 納入 Python 開發工作流程。

隨著開發者對效率和安全性要求的不斷提高,像 UV 這樣結合了多種工具功能、提供顯著性能提升的解決方案,必將在未來的軟件開發領域發揮越來越重要的作用。

後端技術日新月異,訂閱本站,第一時間掌握 Node.js、Python、Docker 等核心技術動態!
關於 Calpa

Calpa 擅長使用 TypeScriptReact.jsVue.js 建立 Responsive Website。

他積極參與開源社區,曾在 2019 年的香港開源大會上擔任講者,提供工作經驗和見解。此外,他也在 GitHub 上公開分享個人博客程式碼,已獲得超過 300 顆星星和 60 個分支的支持。

他熱愛學習新技術,並樂意分享經驗。他相信,唯有不斷學習才能跟上快速演變的技術環境。

熱門文章

最新文章