透過uv快速的建立python虛擬環境,並且依據測試他的效能快過傳統pip方式,本文就簡單介紹一下uv
一、什麼是uv
uv 是由 Astral 這家公司所開發的、用 Rust 編寫的 Python 套件管理工具;主要是用來提升pip相關的速度,以及採用現代化管理方式支援*.toml這類型格式.
工具 | 功能 | 背後語言 | 關聯標準 | 特色 |
---|---|---|---|---|
pip | Python 官方預設的套件管理工具 | Python | 支援 requirements.txt | 穩定、廣泛支援 |
uv | 用 Rust 開發的高速 pip 替代工具 | Rust | 支援 pyproject.toml (PEP 621)與鎖檔 uv.lock | 快速、現代化、整合依賴管理 |
功能 | pip | uv |
---|---|---|
支援 requirements.txt | ✅ | ✅ |
支援 pyproject.toml | ❌(需搭配 pip-tools 或 poetry ) | ✅ |
自動生成鎖檔(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
- 測試工具:
pip
、uv
、poetry
- 測試情境:安裝相同的套件組合,如
Flask
、requests
、numpy
、pandas
等,並比較安裝時間
七、寫在最後
本文章由ChatGPT整理表格,並參考 jumpingcode資料科學手記