前言
在 Build Docker Image 的時候,通常最花時間的都是安裝套件,為了突破這個效能瓶頸,這次決定嘗試使用 uv 來取代 pip 進行 Python 套件的安裝。
什麼是 uv?
uv 是一個以 Rust 撰寫的 Python 套件管理工具,號稱比 pip 還要快 10-100 倍,國外也有相關實測,像是 Streamlit 在 2024 年 7 月就有發 blog 表示他們用 uv 取代 pip 後速度提升了 55%(如圖 1)。
(2025/05更新)
近期發現開始有開源專案的官網文件也已經預設是使用 uv 來安裝,例如 Prefect(如圖 2)。
之前我也有在本機實測過,確實有非常顯著地提升了效能,而這次我打算將 uv 運用在 Docker 上,讓 Docker image 的建立時間能大幅縮減。


uv 的使用方法
本機
uv 在本機的使用方法,跟平常的 pip 非常相似,只要安裝 uv 後把原本的 pip 指令改成 uv pip 指令就可以,例如:
# 使用 pip 安裝套件
pip install pandas
# 改成使用 uv 安裝套件
pip install uv
uv pip install pandas
(若是想了解 uv 在 Python 專案上的開發流程:如何使用 uv 取代 pip 來改善 Python 專案的開發流程)
Dockerfile
若是在 Dockerfile 中想要使用 uv,則不是使用 pip 安裝,而是透過 COPY 讓我們能使用 uv 指令:
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
並且要將原本的 uv pip install 加上 --system 來避免 Python PATH 錯誤:
RUN uv pip install --system --no-cache-dir -r requirements.txt
實測檔案
Dockerfile Using pip
Dockerfile Using uv
requirements.txt
另外一個檔案是 requirements.txt,因為這次打算使用 FastAPI 和 GCP 的 Pub/Sub 服務搭建一個 Data Streaming 的 API 服務,所以只需要安裝以下兩個套件
fastapi[standard]==0.112.1
google-cloud-pubsub==2.23.0
以下是實測的紀錄
Linux Ubuntu 上進行 docker build
使用 pip = 87.6 秒

使用 uv = 33.3 秒

GCP Cloud Shell 上進行 docker build
使用 pip = 20.1 秒

使用 uv = 11.7 秒

總結
先用表格整理一下實測結果:
| (單位:秒) | pip | uv | 效能提升 |
| Linux Ubuntu | 87.6 | 33.3 | 2.63x |
| Cloud Shell | 20.1 | 11.7 | 1.71 x |
這次實測後發現 uv 非常明顯地提升了 Docker Image 的建立過程,可以達到 pip 2 倍以上的速度,而且這次只有指定安裝兩個套件,如果環境需要更多套件或是像 PyTorch 那種龐大的套件的話,效果我覺得應該會更顯著!
總之,目前我個人會考慮以後開發都用 uv 來代替 pip!
[…] uv 取代 pip 為主要開發工具,我之前也有寫過 uv + Docker 的教學 […]
讚讚