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速度較慢

最佳實踐

  1. 每個專案使用獨立的虛擬環境
  2. 將 requirements.txt 加入版本控制
  3. 不要將虛擬環境目錄加入版本控制
  4. 使用有意義的環境名稱(或統一使用 venv
  5. 定期更新套件並測試相容性
# 專案目錄結構
my_project/
    venv/              # 不加入 git
    src/
        main.py
    tests/
    requirements.txt   # 加入 git
    README.md
    .gitignore