uv 新世代Python管理套件

透過uv快速的建立python虛擬環境,並且依據測試他的效能快過傳統pip方式,本文就簡單介紹一下uv

一、什麼是uv

uv 是由 Astral 這家公司所開發的、用 Rust 編寫的 Python 套件管理工具;主要是用來提升pip相關的速度,以及採用現代化管理方式支援*.toml這類型格式.

工具功能背後語言關聯標準特色
pipPython 官方預設的套件管理工具Python支援 requirements.txt穩定、廣泛支援
uv用 Rust 開發的高速 pip 替代工具Rust支援 pyproject.toml(PEP 621)與鎖檔 uv.lock快速、現代化、整合依賴管理
功能pipuv
支援 requirements.txt
支援 pyproject.toml❌(需搭配 pip-toolspoetry
自動生成鎖檔(lockfile)❌(需 pip-tools)✅(uv.lock
自動分離 dev/production 依賴✅ (uv add --dev)

二、如何服用?

uv是屬於額外的套件,當然也可以透過pip安裝,但建議就是以最純粹安裝方式即可,可以參考官方安裝方式,這邊採用Mac Howebrew方式

brew install uv

三、建立虛擬環境

1.建立專案資料夾

mdkir testproject
cd testproject

2.建立pyproject.toml

uv init

會在資料夾下產生一些檔案,結構類似下面

testproject/
├── pyproject.toml       # 套件與專案設定
├── uv.lock              # 精準版本鎖定(會自動建立)
├── .venv/               # 虛擬環境(由 uv venv 建立)
├── .gitignore
└── app.py / your code

其中有個叫做pyproject.toml的專案設定檔

[project]
name = "testproject"
version = "0.1.0"
dependencies = []

[tool.uv]
virtualenvs.in-project = true

3.建立虛擬環境

uv venv

4.啟動虛擬環境

source .venv/bin/activate

5.安裝套件

# 正式環境
uv add django ....etc

# 開發工具(不會被部署)
uv add -dev pytest ...etc

之後這些資訊就會被寫入pyproject.toml與uv.lock

#例如在pyproject.toml會看到,剛安裝的django會被寫入dependencies
[project]
name = "testporject"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
    "django>=5.2.1",
]

6.之後就跟操作一般的python與django一樣,不值得要注意的是以後的安裝套件記得要用uv add 他才能幫你記錄相依性與部屬等資訊.

7.如果要上傳到git,記得有些不需要上傳的請放在gitignore

echo ".venv/" > .gitignore
echo "__pycache__/" >> .gitignore
echo "*.pyc" >> .gitignore

8.離開虛擬環境

deactivate

四、其他人要使用呢?

僅需要下載專案後執行

uv venv
source .venv/bin/activate
uv sync  # 根據 pyproject.toml + uv.lock 安裝全部套件

五、建立一個腳本方便以後使用

建立一個腳本方便以後使用

1.建立腳本

#!/bin/bash

# 檢查是否有提供專案名稱
if [ -z "$1" ]; then
  echo "❌ 請提供專案名稱,例如: ./create_uv_project.sh myproject"
  exit 1
fi

project_name="$1"

# 建立專案資料夾
mkdir "$project_name" && cd "$project_name" || exit

# 初始化專案
uv init --yes
uv venv

# 啟用虛擬環境(僅限 macOS/Linux)
source .venv/bin/activate

# 安裝正式與開發套件
uv add django requests
uv add --dev black pytest

# 建立 .gitignore
echo -e ".venv/\n__pycache__/\n*.pyc" > .gitignore

echo "✅ 專案 '$project_name' 建立完成!已啟用虛擬環境。"

2.給予腳本執行權限

chmod +x create_uv_project.sh

3.使用腳本

./create_uv_project.sh myproject

六、同場加映

依據網路的資訊得到的測試結果

測試情境pip 時間uv 時間優化幅度
冷快取安裝(首次安裝)約 18.3 秒約 2.3 秒約 8 倍
熱快取安裝(重建環境)約 5.2 秒約 1.7 秒約 3 倍
建立虛擬環境約 3.7 秒約 0.09 秒約 41 倍
安裝單一套件(Flask)約 19.2 秒約 0.02 秒約 960 倍
安裝多個套件(10+ 套件)約 37.9 秒約 1.1 秒約 35 倍

資料來源:

Medium: UV vs. PIP: Revolutionizing Python Package Management

The Data Quarry: Towards a unified Python tooling

Prog.World: UV. The Fastest Python Package Manager

測試環境:

  • 硬體環境:2021 年款 MacBook Pro,16GB 記憶體
  • 操作系統:macOS 12.3
  • Python 版本:3.10
  • 測試工具pipuvpoetry
  • 測試情境:安裝相同的套件組合,如 Flaskrequestsnumpypandas 等,並比較安裝時間

七、寫在最後

本文章由ChatGPT整理表格,並參考 jumpingcode資料科學手記

發佈留言

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