Python 虛擬環境與 uv 套件管理

Python 虛擬環境(Python Virtual Environment)

這篇 Python 虛擬環境教學將回答兩個問題:為什麼需要虛擬環境?以及怎麼用 uv 把「環境+套件」一次管好。安裝第三方套件之前,這篇是必修——直接把套件裝進系統 Python 是新手最常見的環境災難來源。

為什麼需要虛擬環境

假設專案 A 需要某套件 1.x 版、專案 B 需要 2.x 版,全裝在系統 Python 裡必定打架。虛擬環境讓每個專案擁有自己獨立的套件空間

問題沒有虛擬環境有虛擬環境
版本衝突專案間互相干擾各專案獨立
環境重現「在我電腦可以跑」依紀錄一鍵還原
系統污染系統 Python 越裝越亂系統保持乾淨

傳統做法 vs uv

傳統流程要自己處理 venv 建立、啟用、pip 安裝、requirements.txt 維護;uv 把這些全包了:

動作傳統(venv + pip)uv
建立專案環境python -m venv .venvuv init 後自動處理
啟用環境source .venv/bin/activate不需要,uv run 自動用
安裝套件pip install requestsuv add requests
紀錄相依手動 pip freeze > requirements.txt自動寫入 pyproject.toml
還原環境pip install -r requirements.txtuv sync

用 uv 建立專案

uv init myproject
cd myproject

uv 會建立專案骨架,重點檔案:

檔案用途
pyproject.toml專案設定與相依套件清單
main.py範例進入點
.venv/虛擬環境(第一次執行時自動建立)
uv.lock鎖定每個套件的精確版本

安裝套件:uv add

以安裝 HTTP 套件 requests 為例(第 40 篇會正式使用):

uv add requests

執行輸出(版本號可能不同):

Resolved 6 packages in 120ms
Installed 5 packages in 80ms
 + certifi==2026.4.26
 + charset-normalizer==3.4.2
 + idna==3.10
 + requests==2.32.4
 + urllib3==2.4.0

套件同時被記進 pyproject.toml,移除用 uv remove requests

執行程式:uv run

uv run main.py

uv run 會自動使用專案的虛擬環境,不需要手動啟用,這是 uv 最方便的地方。在專案裡測試套件是否可用:

# main.py
import requests

print(requests.__version__)
uv run main.py

執行輸出(版本號可能不同):

2.32.4

還原環境:uv sync

拿到別人的專案(或換了電腦)時,一行還原所有相依套件:

uv sync

因為有 uv.lock 鎖定精確版本,裝出來的環境跟原作者完全一致——「在我電腦可以跑」從此有解。

常見錯誤

1. ModuleNotFoundError(裝了卻找不到)

最常見原因:套件裝在別的環境。用 uv 流程時,執行一律用 uv run,就不會用錯環境;混用系統 python 指令就會找不到套件。

2. 把 .venv 傳給別人或進版本控制

.venv 資料夾又大又綁定機器,不要複製、不要 commit(uv 產生的 .gitignore 已排除)。要分享環境,給 pyproject.toml + uv.lock 就夠。

3. 在錯的資料夾執行 uv add

uv 依 pyproject.toml 判斷專案位置,在專案外執行會裝錯地方。先 cd 進專案資料夾再操作。

總結

虛擬環境讓每個專案的套件互不干擾;uv 流程只要四個指令:uv init 建專案、uv add 裝套件、uv run 執行、uv sync 還原。記住鐵則:用 uv 的專案就全程用 uv run 執行。下一篇學例外處理,讓程式遇到錯誤不再直接當掉。

延伸閱讀