你以為在寫程式,其實整個晚上都在跟環境打架。

學 Python 時,最讓人崩潰的通常不是看不懂報錯,而是「明明照著教學一行行貼,為什麼我的噴一片紅?」的無奈。通常會遇到不外乎這幾種問題

  1. 套件版本自己顧容易亂
  2. 專案間依賴衝突
  3. 換台電腦或丟到 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?

雖然執行 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 檔,確保換台機器還原出來的版本毫釐不差。
💡 省事亮點:再也不必手動 source activate

傳統模式下,每開一個終端機就得手動 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。等下載、等編譯,
等它不要再出下一個錯。

那一刻其實很孤獨。
因為你知道——你欠的不是技術,是時間。

把時間留給寫程式,別再浪費在跟環境吵架上了。

« »