Skip to content

uv Python 版本與環境管理

在 Windows 環境以 uv 取代 pip + venv + pyenv 的完整工作流:安裝 Python、建立虛擬環境、管理依賴、鎖定版本,以及協作者一鍵還原環境。

概述

uv 是 Astral 開發的 Python 套件與版本管理工具,以 Rust 撰寫,速度遠快於傳統工具鏈。其核心優勢是整合多個角色

傳統工具uv 等效能力
pyenvuv python install / pin
venv / virtualenvuv venv / uv run(自動建立)
pipuv add / uv pip install
pip-compile / poetry.lockuv.lock

uv 管理的 Python 是獨立安裝,不會污染系統 PATH;--defaultuv python pin 是兩套獨立機制。

uv 也是 Claude Desktop Extension(MCPB)的推薦執行器——在 mcp_config.command 填入 "uv",安裝時自動下載 Python 與依賴(詳見Claude Desktop Extension(MCPB)打包與發布)。

核心內容

--default vs uv python pin 的差異

這是初學者最容易混淆的兩套機制:

機制控制範圍寫入位置用途
uv python install --default直接打 python 時使用的版本系統 PATH全域指令 python script.py
uv python pin 3.12uv run 時使用的版本.python-version 檔案專案層級鎖定

在同一目錄下,python --versionuv run python --version 可能回傳不同版本,這是正常行為。

版本優先順序

uv run 讀取 Python 版本時,遵循以下優先序(由高到低):

  1. pyproject.tomlrequires-python
  2. 目前目錄的 .python-version
  3. 上層目錄的 .python-version(向上遞迴,最終到 $HOME
  4. uv 自行選擇的最新穩定版

核心版控檔案

檔案用途
pyproject.toml宣告直接依賴與版本範圍
uv.lock鎖定所有依賴(含間接依賴)的精確版本
.python-version指定專案 Python 版本

三個檔案都應加入 Git.venv/ 加入 .gitignore

關鍵要點

  • uv sync 一條指令完成:安裝對應 Python + 建立 .venv + 安裝所有鎖定依賴
  • 通常不需要手動 activate 虛擬環境,直接用 uv run <command> 即可
  • uv add 同時更新 pyproject.tomluv.lock,是新增依賴的標準方式
  • uv pip install 仍可用,但不更新 pyproject.toml(不推薦用於正式專案)
  • uv export --format requirements-txt 可產生傳統 requirements.txt,供 Docker 或不用 uv 的協作者使用

實際應用

協作者還原環境:

powershell
git clone <repo>
cd <project>
uv sync
# 完成:Python 版本正確,所有依賴已安裝

在 MCPB extension 中使用(無需使用者手動操作):

Claude Desktop 安裝 extension 時,uv run --project ${__dirname} 自動觸發依賴下載,使用者無需預裝 Python 或 pip。

部署設定參考

安裝 uv(Windows)

powershell
# 官方安裝腳本(PowerShell)
irm https://astral.sh/uv/install.ps1 | iex

# 安裝後重開 terminal
uv --version

# 替代方案
winget install astral-sh.uv
# 或
scoop install uv

安裝 uv(Ubuntu / Linux)

Standalone installer(推薦):不需預裝 Python 或其他套件管理器,二進位安裝至 ~/.local/bin,並自動更新 shell profile(~/.bashrc 等)。

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

# 或 wget
wget -qO- https://astral.sh/uv/install.sh | sh

# 安裝後重新載入 shell
source ~/.bashrc   # 或 source ~/.zshrc / 重開 terminal
uv --version

不想讓安裝腳本修改 shell profile 時:

bash
curl -LsSf https://astral.sh/uv/install.sh | env UV_NO_MODIFY_PATH=1 sh
# 之後需手動將 ~/.local/bin 加入 PATH

Homebrew(已安裝 Homebrew 時):

bash
brew install uv

Snap:

bash
sudo snap install astral-uv --classic

pip / pipx(不推薦用於正式環境):

bash
pipx install uv
# 或
pip install uv

升級 uv 本身

升級方式取決於安裝方式

安裝方式升級指令適用平台備註
Standalone installer(官方腳本)uv self updateWindows、Linux推薦;自動下載最新版
wingetwinget upgrade astral-sh.uvWindows
scoopscoop update uvWindows
Homebrewbrew upgrade uvmacOS、Linux
snapsudo snap refresh astral-uvLinux
pippip install --upgrade uv跨平台不支援 uv self update

重要:以 standalone installer 安裝的 uv 才能使用 uv self update;透過其他套件管理器安裝時,此指令不可用,必須改用對應的套件管理器升級。

powershell
# Standalone installer 升級(Windows,最常見情況)
uv self update

# winget 升級
winget upgrade astral-sh.uv

# scoop 升級
scoop update uv
bash
# Standalone installer 升級(Linux)
uv self update

# Homebrew 升級
brew upgrade uv

# snap 升級
sudo snap refresh astral-uv

注意uv self update 執行時會重新跑安裝腳本,可能修改 shell 設定檔(PATH 等)。若不想讓它修改:Windows 執行前設定 $env:UV_NO_MODIFY_PATH = "1";Linux/macOS 在指令前加 UV_NO_MODIFY_PATH=1 uv self update

Python 版本管理

powershell
# 安裝多個版本
uv python install 3.12 3.13

# 查看已安裝版本
uv python list

# 移除版本
uv python uninstall 3.11

# 註冊 python 全域指令(讓 `python` 指令可用)
uv python install 3.12 --default

# 切換全域版本(直接覆蓋)
uv python install 3.13 --default

Python 版本鎖定

powershell
# 全域預設(home 目錄,作為所有專案的 fallback)
cd $HOME
uv python pin 3.12

# 專案層級(覆蓋全域設定)
cd C:\Projects\my-app
uv python pin 3.13

建立虛擬環境與專案

powershell
# 全新專案(推薦)
cd C:\Projects
uv init my-app --python 3.13
cd my-app
# 自動產生 pyproject.toml, .python-version
# 首次 uv run 或 uv sync 時自動建立 .venv

# 既有專案(手動建立 venv)
cd C:\Projects\existing-app
uv venv --python 3.12

# 手動啟用(通常不需要)
.venv\Scripts\activate

依賴管理

powershell
# 新增依賴(更新 pyproject.toml + uv.lock)
uv add requests fastapi uvicorn

# 新增開發用依賴
uv add --dev pytest ruff mypy

# 從既有 requirements.txt 安裝
uv pip install -r requirements.txt

# 同步環境(確保 .venv 與宣告一致)
uv sync

pip vs uv 指令對照表

環境初始化

功能pip / venvuv
建立虛擬環境python -m venv .venvuv venv
指定版本建立環境python3.11 -m venv .venvuv venv --python 3.11
初始化新專案(含 pyproject.toml)(手動)uv init

套件安裝

功能pipuv
安裝套件pip install requestsuv add requests
安裝指定版本pip install requests==2.31.0uv add requests==2.31.0
安裝開發用依賴pip install pytest (手動分類)uv add --dev pytest
從 requirements.txt 安裝pip install -r requirements.txtuv pip install -r requirements.txt
安裝 extraspip install "fastapi[all]"uv add "fastapi[all]"
安裝本地套件(可編輯)pip install -e .uv pip install -e .uv add --editable .
同步所有依賴(含 lock file)(無對等)uv sync

套件移除與更新

功能pipuv
移除套件pip uninstall requestsuv remove requests
更新單一套件pip install --upgrade requestsuv add --upgrade requests
更新所有套件pip list --outdated + 手動uv lock --upgrade 然後 uv sync
更新 lock file(不安裝)(無對等)uv lock --upgrade

套件查詢

功能pipuv
列出已安裝套件pip listuv pip list
查看套件詳細資訊pip show requestsuv pip show requests
列出過時套件pip list --outdateduv pip list --outdated
檢查依賴衝突pip checkuv pip check

匯出依賴

功能pipuv
匯出 requirements.txtpip freeze > requirements.txtuv pip freeze > requirements.txt
產生鎖定檔(需 pip-tools) pip-compileuv lock
從 pyproject.toml 匯出 requirements(需 pip-tools)uv export --format requirements-txt

執行指令(不需啟動 venv)

功能pipuv
在專案環境執行指令(需先 activate)uv run python script.py
執行模組(需先 activate)uv run python -m pytest
臨時安裝並執行工具pipx run blackuvx black

pip install 全域旗標對照

pip 旗標uv 對應方式
--no-depsuv pip install --no-deps
--pre(允許預覽版)uv add --prerelease=allow
--index-urluv pip install --index-url <URL>
--extra-index-urluv pip install --extra-index-url <URL>
--trusted-hostuv pip install --trusted-host <HOST>
--no-cache-diruv pip install --no-cache
--quietuv --quiet ...
--verboseuv --verbose ...

重要區別uv add / uv remove 同時更新 pyproject.tomluv.lock,適合專案管理;uv pip install / uv pip uninstall 是低階指令,行為接近原始 pip,不會更新 pyproject.toml

Git 版控

powershell
# 加入版控
git add pyproject.toml uv.lock .python-version
git commit -m "chore: init project dependencies"

.gitignore 加入:

.venv/

產生傳統 requirements.txt(給 Docker 或不用 uv 的協作者):

powershell
uv export --format requirements-txt > requirements.txt

協作者還原流程

powershell
# clone repo 後
uv sync
# 自動:安裝正確 Python → 建立 .venv → 安裝所有鎖定依賴

相關概念

來源