Python 虛擬環境管理全攻略:venv、conda 與 uv 比較
Python 虛擬環境管理全攻略:venv、conda 與 uv 比較
每位 Python 開發者都遇過相同的惡夢:在一台機器上同時維護多個專案,每個專案需要不同版本的套件,最終導致環境大亂,pip install 後舊專案直接炸掉。虛擬環境就是解決這個問題的答案。這篇文章比較幾種主流的 Python 環境管理方案,幫你選出最適合的工具。
為什麼需要虛擬環境?
專案 A:Django 3.2, requests 2.26
專案 B:Django 4.2, requests 2.31
專案 C:Flask 2.0, requests 2.28如果把所有套件都裝在全域環境,版本衝突是必然的。虛擬環境讓每個專案有自己獨立的 Python 環境,互不干擾。
方案一:venv(內建)
venv 是 Python 3.3+ 內建的虛擬環境工具,無需安裝,是最基礎的解決方案。
# 建立虛擬環境
python -m venv .venv
# 啟動(Linux/macOS)
source .venv/bin/activate
# 啟動(Windows)
.venv\Scripts\activate
# 確認已啟動
which python # 應顯示 .venv 路徑
# 安裝套件
pip install django requests
# 匯出相依套件
pip freeze > requirements.txt
# 關閉虛擬環境
deactivate在其他機器重建環境:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt優點: 零依賴、Python 內建、夠用 缺點: 只管理套件,不管理 Python 版本;沒有 lock file
方案二:pyenv + venv
pyenv 負責管理 Python 版本,venv 負責管理套件,是一個強大的組合:
# 安裝 pyenv(macOS)
brew install pyenv
# 安裝特定 Python 版本
pyenv install 3.11.8
pyenv install 3.12.2
# 查看已安裝版本
pyenv versions
# 設定專案使用的 Python 版本
cd my-project
pyenv local 3.11.8 # 建立 .python-version 檔案
# 確認版本
python --version # Python 3.11.8
# 建立虛擬環境(使用指定版本)
python -m venv .venv方案三:Poetry
Poetry 是目前最受歡迎的 Python 依賴管理工具,提供完整的專案管理功能:
# 安裝 Poetry
curl -sSL https://install.python-poetry.org | python3 -
# 建立新專案
poetry new my-project
cd my-project
# 或在現有專案初始化
poetry initpyproject.toml 是 Poetry 的核心設定檔:
[tool.poetry]
name = "my-project"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.11"
django = "^4.2"
requests = "^2.31"
[tool.poetry.group.dev.dependencies]
pytest = "^7.4"
black = "^23.0"
mypy = "^1.5"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"# 安裝依賴
poetry install
# 新增套件
poetry add fastapi
poetry add --group dev pytest-cov
# 移除套件
poetry remove requests
# 更新套件
poetry update
# 執行指令
poetry run python manage.py runserver
poetry run pytest
# 啟動 shell
poetry shell
# 查看虛擬環境位置
poetry env infoPoetry 會自動產生 poetry.lock,確保所有人安裝完全相同版本的套件。
優點: 完整的依賴管理、lock file、語意化版本、發布套件一條龍 缺點: 安裝稍慢;有時解析依賴會很久
方案四:uv(新世代工具)
uv 是由 Astral(Ruff 的開發商)用 Rust 寫成的超快速 Python 套件管理工具,速度比 pip 快 10-100 倍。
# 安裝 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 建立虛擬環境
uv venv
uv venv --python 3.12 # 指定版本
# 啟動
source .venv/bin/activate
# 安裝套件(極速)
uv pip install django requests
# 從 requirements.txt 安裝
uv pip install -r requirements.txt
# 同步安裝(確保環境與 requirements.txt 一致)
uv pip sync requirements.txtuv 管理整個專案(新功能)
# 初始化專案
uv init my-project
cd my-project
# 新增依賴(自動更新 pyproject.toml 和 uv.lock)
uv add django
uv add --dev pytest
# 移除依賴
uv remove requests
# 執行指令
uv run python main.py
uv run pytest
# 安裝所有依賴
uv sync速度比較(安裝 Django + 所有依賴):
| 工具 | 時間 |
|---|---|
| pip | ~15s |
| Poetry | ~12s |
| uv | ~0.8s |
各工具比較
| 功能 | venv | Poetry | uv |
|---|---|---|---|
| Python 版本管理 | ❌ | ❌ | ✅(實驗性) |
| Lock file | ❌ | ✅ | ✅ |
| 依賴群組 | ❌ | ✅ | ✅ |
| 安裝速度 | 中 | 中 | 極快 |
| 發布套件 | ❌ | ✅ | ✅ |
| 學習曲線 | 低 | 中 | 低 |
| 成熟度 | 高 | 高 | 中 |
我的建議
- 個人小專案:venv + pip 就夠了
- 團隊協作專案:Poetry(成熟穩定,lock file 很重要)
- 追求速度:uv(Rust 加持,速度驚人,2024 年後快速成熟)
- 資料科學:conda(套件相容性最好,處理非 Python 依賴)
.gitignore 設定
無論用哪種工具,記得把虛擬環境資料夾加入 .gitignore:
# Python 虛擬環境
.venv/
venv/
env/
__pycache__/
*.pyc
*.pyo
.python-version總結
Python 的環境管理工具選擇雖然多,但核心概念是一致的:為每個專案建立隔離的環境,並透過 lock file 確保可重現的構建。對於新專案,我目前傾向使用 uv,它的速度優勢在 CI/CD 環境中尤為明顯;對於已有 Poetry 的舊專案,則繼續維持原有工具鏈。
分享這篇文章