Python 虛擬環境 (Virtual Environment)
虛擬環境讓你可以為每個專案建立獨立的 Python 環境,避免不同專案之間的套件版本衝突。
為什麼需要虛擬環境
假設你有兩個專案:
- 專案 A 需要 Django 3.0
- 專案 B 需要 Django 4.0
如果沒有虛擬環境,兩個專案會共用同一個 Django 版本,可能造成其中一個專案無法正常運作。
虛擬環境讓每個專案有自己獨立的套件安裝目錄。
使用 venv(內建)
Python 3.3+ 內建 venv 模組。
建立虛擬環境
python -m venv venv_name
# 建立名為 venv 的虛擬環境
python -m venv venv
# 或指定其他名稱
python -m venv myenv
啟動虛擬環境
# Linux / macOS
source venv/bin/activate
# Windows (cmd)
venv\Scripts\activate.bat
# Windows (PowerShell)
venv\Scripts\Activate.ps1
啟動後,命令列提示會顯示虛擬環境名稱:
(venv) $
停用虛擬環境
deactivate
刪除虛擬環境
直接刪除虛擬環境目錄即可:
rm -rf venv # Linux / macOS
rmdir /s /q venv # Windows
虛擬環境中安裝套件
啟動虛擬環境後,使用 pip 安裝的套件只會安裝在虛擬環境中:
# 啟動虛擬環境
source venv/bin/activate
# 安裝套件
pip install requests
pip install flask
# 查看已安裝的套件
pip list
# 產生 requirements.txt
pip freeze > requirements.txt
完整工作流程
# 1. 建立專案目錄
mkdir my_project
cd my_project
# 2. 建立虛擬環境
python -m venv venv
# 3. 啟動虛擬環境
source venv/bin/activate # Linux / macOS
# 4. 安裝套件
pip install requests flask
# 5. 開發你的程式
# ...
# 6. 儲存套件清單
pip freeze > requirements.txt
# 7. 停用虛擬環境
deactivate
在其他電腦重建環境
# 1. 複製專案(不包含 venv 目錄)
git clone https://github.com/user/my_project.git
cd my_project
# 2. 建立虛擬環境
python -m venv venv
# 3. 啟動虛擬環境
source venv/bin/activate
# 4. 安裝套件
pip install -r requirements.txt
.gitignore 設定
虛擬環境目錄不應該加入版本控制:
# .gitignore
venv/
env/
.venv/
__pycache__/
*.pyc
使用 virtualenv
virtualenv 是更早的虛擬環境工具,功能比 venv 更豐富:
# 安裝 virtualenv
pip install virtualenv
# 建立虛擬環境
virtualenv venv
# 建立指定 Python 版本的虛擬環境
virtualenv -p python3.9 venv
使用 conda
Anaconda/Miniconda 提供的環境管理:
# 建立環境
conda create --name myenv python=3.10
# 啟動環境
conda activate myenv
# 安裝套件
conda install numpy pandas
# 停用環境
conda deactivate
# 列出所有環境
conda env list
# 刪除環境
conda env remove --name myenv
使用 Poetry
Poetry 是現代的 Python 依賴管理工具:
# 安裝 Poetry
pip install poetry
# 初始化專案
poetry init
# 安裝依賴
poetry add requests
poetry add --dev pytest
# 在虛擬環境中執行指令
poetry run python main.py
# 進入虛擬環境 shell
poetry shell
使用 pipenv
pipenv 結合了 pip 和 virtualenv:
# 安裝 pipenv
pip install pipenv
# 建立虛擬環境並安裝套件
pipenv install requests
# 安裝開發依賴
pipenv install --dev pytest
# 啟動虛擬環境
pipenv shell
# 執行指令
pipenv run python main.py
比較不同工具
| 工具 | 優點 | 缺點 |
|---|---|---|
| venv | 內建、簡單 | 功能較少 |
| virtualenv | 功能豐富、支援舊版 Python | 需額外安裝 |
| conda | 支援非 Python 套件 | 較大、較複雜 |
| Poetry | 依賴管理強大、lockfile | 學習曲線 |
| pipenv | 結合 pip 和 virtualenv | 速度較慢 |
最佳實踐
- 每個專案使用獨立的虛擬環境
- 將 requirements.txt 加入版本控制
- 不要將虛擬環境目錄加入版本控制
- 使用有意義的環境名稱(或統一使用
venv) - 定期更新套件並測試相容性
# 專案目錄結構
my_project/
venv/ # 不加入 git
src/
main.py
tests/
requirements.txt # 加入 git
README.md
.gitignore