試用新世代的 Python 套件管理工具 - uv

什麼是 uv?

在介紹 uv 前,必須提到開發的公司 Astral,也就是開發大名鼎鼎的 Python formatter ruff 的公司。他們的野心就是要打造 Python 生態系中最好用的工具。

uv 就是由 Astral 開發的新一代 Python 套件與環境管理工具。
特色是用 Rust 寫的,主打極高速、低記憶體用量,並且把傳統上要用多個工具才能完成的功能(例如 pip、pip-tools、pipx、virtualenv、pyenv)整合到同一個 CLI 中。

簡單說,uv 讓你可以:

  • 管理相依套件及 lock file(pyproject.toml / uv.lock)
  • 建立與管理虛擬環境
  • 安裝與切換 Python 版本
  • 安裝 CLI 工具(類似 pipx)
  • 發佈套件到 PyPI

一起來回顧目前在開發 Python 應用程式時的作法

如果不使用 Docker 或是 VS Code Dev Containers 開發的話,應該不會和下面這個流程差太多。

Step 1: 需要先指定 Python 版本,可能用 pyenv、pipenv 或 conda 來鎖定 Python 版本。

Step 2: 如果前一步的工具沒有附帶虛擬環境,可能就要再使用 Python venv、virtualenvwrapper 或是 poetry 這樣的工具來建立虛擬環境。

Step 3: 套件管理工具如 pip、poetry、conda 開始幫你解析並安裝相依套件。

如果使用 poetry 的話,至少要搭配 pyenv 來一起使用,稍嫌麻煩。


uv 的優勢

相信有過自行管理 Python 虛擬環境的人應該都能體會這有多麻煩,而 uv 的優勢就不言而喻了。

uv 讓我們可以:

  1. 用極快的速度安裝專案需要的套件,特別利於在 CI/CD 需要 build image,或是需要多環境的測試下減少大量的時間。
  2. 在一個新環境或專案中不用頻繁地安裝切換工具,學習成本變低,提升開發者體驗(DevEx)。
  3. 遵守 PEP 518/621,使用 pyproject.toml 來管理相依套件,即使哪天不想用 uv,也能快速切換到支援 pyproject.toml 的工具如 poetry。

uv 常用的指令

安裝 uv(macOS / Linux)

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

初始化專案

1
2
mkdir demo-uv && cd demo-uv
uv init

安裝/同步套件

1
2
uv add fastapi
uv add --dev pytest ruff

如果拿到別人給的 pyproject.toml 有更新,可以使用以下指令同步相依套件:

1
uv sync

uv sync 會根據 pyproject.tomluv.lock 的內容,安裝或更新專案所需的所有相依套件,確保環境與設定檔一致。

執行程式

1
uv run python -c "import fastapi; print(fastapi.__version__)"

安裝特定 Python 版本

1
uv python install 3.12

設定專案使用版本

1
uv python pin 3.12

輸出成 pip 可以使用的 requirements.txt

1
uv export > requirements.txt

比較 uv 和 pip 的安裝速度

分別用 pip 和 uv 來安裝 pandas

從上圖可以看到,pip 的安裝速度相對較慢,特別是在解析相依套件時。

而使用 uv 時,安裝速度明顯更快,特別是在處理相依套件的解析與安裝過程中,速度提升了 40 倍。


測試 uv 在 Docker 中的表現

底下三個測試都用差不多的 Dockerfile,差別只在安裝 Python 套件的方式。

Case 1: 使用 uv pip

1
2
3
4
5
6
7
8
9
10
11
FROM python:3.10-slim

WORKDIR /app

RUN pip install --upgrade pip && pip install uv

COPY pyproject.toml uv.lock /app

RUN uv export --no-hashes --no-dev -o requirement.txt

RUN uv pip install --system -r requirement.txt

Case 2: 使用 uv sync

1
2
3
4
5
6
7
8
9
FROM python:3.10-slim

WORKDIR /app

RUN pip install --upgrade pip && pip install uv

COPY pyproject.toml uv.lock /app

RUN uv sync --frozen --no-dev

Case 3: 使用 pip

1
2
3
4
5
6
7
8
9
10
11
FROM python:3.10-slim

WORKDIR /app

RUN pip install --upgrade pip && pip install uv

COPY pyproject.toml uv.lock /app

RUN uv export --no-hashes --no-dev -o requirement.txt

RUN pip install -r requirement.txt

從這個測試可以看到,不論是使用 uv pip 或是 uv sync,花費的時間都是差不多的,而且遠快於直接使用 pip 安裝。


結論

uv 最近是社群炙手可熱的套件,其優異的效能以及開發體驗讓很多開發者直接愛上。建議大家都體驗看看,如果真的有遇到問題,退回去使用 poetry 也不會是很困難的一件事。


試用新世代的 Python 套件管理工具 - uv
https://my-blog.pages.dev/2025-08-16/introduction-to-uv/
Author
Kevin
Posted on
August 16, 2025
Licensed under