使用 uv 建立 Python 專案環境
使用 uv
建立 Python 專案環境:快速、乾淨、可重現
uv
是由 Astral 開發的超高速 Python 工具,可取代 pip
, venv
, pyenv
, poetry
的安裝、建立虛擬環境、Python 版本管理、專案管理等功能,支援 pyproject.toml
的依賴管理,是現代化 Python 專案環境建置的利器。
這篇筆記整理了使用 uv
建立虛擬環境、安裝套件、管理依賴的完整流程,適合給想建立 快速、可重現、乾淨的 Python 開發環境 的工程師參考。
🛠 安裝 uv
pip install uv
或使用 Homebrew (macOS/Linux):
brew install astral-sh/tap/uv
🚀 建立 Python 專案環境流程
uv init .
uv venv
uv add django
步驟說明:
指令 | 功能說明 |
---|---|
uv init . |
初始化 pyproject.toml ,設定專案 metadata |
uv venv |
建立虛擬環境 .venv |
uv add django |
安裝 Django 並加入 pyproject.toml + uv.lock |
✅ 安裝的套件會被記錄到 pyproject.toml
中,並且自動鎖定到 uv.lock
,確保環境重現性。
✅ 常用 uv 指令總覽
功能 | 指令範例 | 說明 |
---|---|---|
安裝套件 | uv add requests |
加入正式依賴 |
安裝 dev 套件 | uv add --dev ruff |
加入開發用依賴(如 Linter) |
查看已安裝套件 | uv pip list |
顯示虛擬環境內的套件 |
執行 Python 程式 | uv run python app.py |
使用虛擬環境執行程式 |
移除套件 | uv remove requests |
從依賴清單和虛擬環境中移除套件 |
同步環境 | uv sync |
根據 lock 檔安裝所有依賴 |
🔄 清除並重建虛擬環境
如果想清除多餘的依賴或重建乾淨環境:
rm -rf .venv uv.lock
uv venv
uv sync
這會根據目前 pyproject.toml
重建乾淨環境,不殘留任何「孤兒套件」。
🐍 指定 Python 版本(選擇性)
檢查可安裝哪些 Python 版本並安裝
uv python list
uv python install 3.12
切換 Python 版本
uv python pin 3.12
# pyproject.toml
[project]
requires-python = ">=3.10"
如需使用指定的 Python 安裝版本建構 .venv
,可這樣設定:
PYTHON=/usr/local/bin/python3.10 uv venv
比較 pyenv 跟 uv 兩種 Python 版本管理
工具 | 用途 | 影響範圍 |
---|---|---|
pyenv |
控制 整個系統或目錄的 Python 版本 | 全域或目錄切換 |
uv |
在虛擬環境中自動管理 Python 版本 | 只限 .venv |
🧪 執行與開發(不用手動 activate 虛擬環境!)
uv run python manage.py runserver # 執行 Django 開發伺服器
uv run pytest # 執行測試
uv run
會自動使用.venv/bin/python
,不需手動source .venv/bin/activate
📌 範例 pyproject.toml
[project]
name = "my-uv-app"
version = "0.1.0"
description = "A Python app using uv for dependency management"
requires-python = ">=3.10"
[tool.uv.dependencies]
django = "*"
[tool.uv.dev-dependencies]
ruff = "*"
指令比較
動作 | 會寫入 pyproject.toml | 會更新 uv.lock | 安裝到虛擬環境 |
---|---|---|---|
uv add flask |
✅ 是 | ✅ 是 | ✅ 是 |
uv pip install |
❌ 否 | ❌ 否 | ✅ 是 |
uv lock |
❌ 否 | ✅ 是(根據 pyproject.toml) | ❌ 否 |
uv sync |
❌ 否 | ❌ 否 | ✅ 是(根據 uv.lock) |
🧠 小結
uv
是快速又現代的 Python 專案工具。- 和
pip
不同,uv add
是管理專案依賴,自動記錄與鎖定。 - 搭配
pyproject.toml
+uv.lock
可以輕鬆建立 一致可重現 的環境。 uv run
取代虛擬環境的啟動/關閉流程,開發更方便。