你以為在寫程式,其實整個晚上都在跟環境打架。
- 套件版本自己顧容易亂
- 專案間依賴衝突
- 換台電腦或丟到 CI 就集體失憶。
直到 使用 UV 終於不用通靈管環境了。
01. 傳統 pip + virtualenv 到底難用在哪
傳統做法最大的問題在於步驟零散,而且解析依賴很慢:
| 比較維度 | 傳統做法 (pip + requirements.txt) | 現代做法 (UV + pyproject.toml) |
|---|---|---|
| 版本鎖定 | requirements.txt 可讀性差,難以自動鎖定次層間接依賴 |
自動維護 uv.lock,精確鎖定每層依賴樹 |
| 跨機器重現 | 平台相依性高,在 Mac 能跑換到 Windows 常噴編譯錯誤 | 宣告式跨平台鎖定,uv sync 確保百分之百一致 |
| 安裝速度 | 單執行緒慢速下載與輪詢解依賴,大型專案動輒幾分鐘 | Rust 原生極速解析 + 全域快取硬連結,毫秒級瞬間就緒 |
| 操作流暢度 | 反覆手動 source activate,切換終端常忘記激活 |
uv run 自動在虛擬環境執行,無需切換狀態 |
02. 建議的安裝方式:別用 pip 裝
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# macOS / Linux (curl)
curl -LsSf https://astral.sh/uv/install.sh | sh
雖然執行 pip install uv 確實能裝,但這有點矛盾:你正在用「本身就需要被管理的環境」,去裝「管理環境的工具」。用獨立安裝器裝好,UV 自己獨立運行,就不怕哪天 Python 環境壞掉連管理工具也跟著掛。
03. 多版本 Python 管理
以前為了在同一台電腦切換 Python 3.10、3.11 與 3.12,得裝 pyenv 或手動設定 PATH。UV 讓 Python 直譯器的安裝與切換變得很省事:
uv python — 直譯器版本管理
# 查看線上所有可安裝的 Python 版本清單
uv python list
# 一鍵下載並安裝指定的 Python 版本(完全無需管理系統 PATH)
uv python install 3.12
# 將當前專案目錄鎖定為特定版本(自動生成 .python-version)
uv python pin 3.12
# 移除不再需要的舊版 Python
uv python uninstall 3.10
04. 專案建立與執行:uv init 與 uv run
要開始一個新專案,只需要一句命令:
專案初始化與執行
# 初始化專案骨架
uv init my-project
cd my-project
# 建立專屬虛擬環境
uv venv
# 免啟動環境、直接在專屬沙盒中執行腳本!
uv run main.py
uv init 會幫你建立標準的專案結構:
.gitignore:預先排除虛擬環境與快取。.python-version:記錄專案直譯器版本。pyproject.toml:現代 Python 規範的核心設定檔(取代 requirements.txt)。uv.lock:精確記錄所有依賴版本的 lock 檔,確保換台機器還原出來的版本毫釐不差。
傳統模式下,每開一個終端機就得手動 activate,忘記了就直接把套件裝進系統全域。有了 UV,只要使用 uv run python your_script.py,UV 會自動偵測當前目錄的虛擬環境並執行,不用再手動切來切去。
05. 依賴管理與同步
安裝或更新套件不用手動改文字檔:
依賴安裝與同步
# 安裝第三方庫,自動解析依賴並寫入 pyproject.toml 與 uv.lock
uv add requests
# 安裝指定版本
uv add fastapi==0.110.0
# 同步整個環境:根據 lock 檔瞬間還原依賴狀態
uv sync
# 【舊專案無痛遷移】把既有的 requirements.txt 一鍵導入新體系
uv add -r requirements.txt
06. 小結
UV 的好處很直接:速度極快、環境徹底隔離、快取共用不佔硬碟空間。
如果不習慣,要退回原本的 pip 也花不了多少時間。但真正耗損心力的,往往不是花半小時熟悉新工具,而是一次又一次在半夜重裝壞掉的環境、解那些看都看不懂的依賴衝突。
晚上很安靜。
你只想把專案跑起來,不想再跟環境吵架。螢幕亮著,錯誤訊息一行接著一行,
像在無聲提醒你:有些問題,真的跟努力無關。你敲下 Enter。等下載、等編譯,
等它不要再出下一個錯。那一刻其實很孤獨。
因為你知道——你欠的不是技術,是時間。
把時間留給寫程式,別再浪費在跟環境吵架上了。

