跳至主要內容

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 init

pyproject.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 info

Poetry 會自動產生 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.txt

uv 管理整個專案(新功能)

# 初始化專案
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 的舊專案,則繼續維持原有工具鏈。

分享這篇文章