本文 AI 產出,尚未審核
Python 基礎概念(Fundamentals)
主題:pip 與虛擬環境(venv / virtualenv / conda)
簡介
在開發 Python 專案時,套件管理與執行環境的隔離是最常碰到的兩大挑戰。
如果直接在全域 (global) Python 中安裝第三方套件,往往會導致版本衝突、依賴不一致,甚至影響系統其他程式的正常運作。
pip、venv、virtualenv 與 conda 正是為了解決這些問題而誕生的工具。
掌握它們的使用方法,不僅能讓你的程式碼在不同機器上保持一致,也能在多人協作或部署時降低「在我機器上可以跑」的風險。
核心概念
1. pip:Python 的套件安裝器
pip內建於 Python 3.4 之後的官方發行版,是最常用的 Python Package Index (PyPI) 客戶端。- 主要指令:
| 指令 | 說明 |
|---|---|
pip install package_name |
安裝套件 |
pip uninstall package_name |
移除套件 |
pip list |
顯示已安裝套件 |
pip freeze > requirements.txt |
輸出當前環境的套件清單(常用於部署) |
pip install -r requirements.txt |
從清單安裝所有套件 |
範例 1:安裝與列出套件
# 安裝 requests 套件(會自動解析相依套件)
!pip install requests
# 顯示目前環境已安裝的套件
!pip list
Tip:在 Jupyter Notebook 中,使用
!前綴執行系統指令;在終端機直接輸入pip install …。
2. venv:Python 內建的虛擬環境工具
venv於 Python 3.3 起加入標準函式庫,不需要額外安裝。- 它會在指定的目錄下建立一個獨立的 Python 執行環境,包含自己的
python可執行檔與site-packages目錄。
建立與使用 venv
# 建立名為 .venv 的虛擬環境(放在專案根目錄)
python -m venv .venv
# Windows:啟動虛擬環境
.\.venv\Scripts\activate
# macOS / Linux:啟動虛擬環境
source .venv/bin/activate
啟動後,終端機前綴會變成 (.venv),此時執行的 python、pip 都是虛擬環境內的版本。
範例 2:在 venv 中安裝套件並產生 requirements
# 假設已在虛擬環境內
pip install pandas numpy matplotlib
# 把當前環境的套件寫入 requirements.txt
pip freeze > requirements.txt
3. virtualenv:跨版本的虛擬環境解決方案
virtualenv是在venv出現前最常用的第三方套件,支援 Python 2、Python 3 以及 不同的 Python 版本共存。- 它的使用方式與
venv類似,但需要先安裝:
pip install virtualenv
# 建立使用 Python 3.9 的虛擬環境
virtualenv -p /usr/bin/python3.9 myenv
範例 3:同一專案同時使用兩個不同 Python 版本
# 建立 Python 3.8 的環境
virtualenv -p /usr/local/bin/python3.8 env38
# 建立 Python 3.11 的環境
virtualenv -p /usr/local/bin/python3.11 env311
# 啟動任一環境
source env38/bin/activate # macOS / Linux
# .\env311\Scripts\activate # Windows
4. conda:跨語言的套件與環境管理器
conda由 Anaconda / Miniconda 提供,除了管理 Python 套件,還能安裝 C/C++、R、Julia 等語言的套件。特色:
- 二進位套件(如 NumPy、SciPy)直接下載,不需要自行編譯。
- 可以同時管理 Python 版本 與 非 Python 依賴(例如 MKL、CUDA)。
常用指令
| 指令 | 說明 |
|---|---|
conda create -n myenv python=3.10 |
建立名為 myenv、Python 3.10 的環境 |
conda activate myenv |
啟動環境 |
conda install pandas |
安裝套件(自動解決相依) |
conda env export > environment.yml |
輸出完整環境(含非 Python 套件) |
conda env create -f environment.yml |
從 yml 檔還原環境 |
範例 4:使用 conda 建立機器學習環境
# 建立環境,包含 Python、TensorFlow、CUDA
conda create -n tf-gpu python=3.10 tensorflow-gpu cudatoolkit=11.8
# 啟動環境
conda activate tf-gpu
# 檢查 TensorFlow 是否正確使用 GPU
python -c "import tensorflow as tf; print(tf.__version__, tf.config.list_physical_devices('GPU'))"
常見陷阱與最佳實踐
| 陷阱 | 說明 | 解決方式 |
|---|---|---|
| 全域安裝套件 | 直接 pip install 到系統 Python,會破壞系統套件或與其他專案衝突。 |
永遠在虛擬環境(venv/virtualenv/conda)中安裝。 |
忽略 requirements.txt |
部署時忘記提供套件清單,導致環境不一致。 | 在每次新增/升級套件後執行 pip freeze > requirements.txt(或 conda env export)。 |
| 混用 pip 與 conda | 在同一 conda 環境裡使用 pip install 可能會破壞 conda 的依賴解決。 |
優先使用 conda install;只有 conda 沒有的套件才使用 pip,且安裝前先 conda list 確認。 |
未設定 .gitignore |
把虛擬環境資料夾(如 .venv、env/)加入版本控制,導致 repo 龐大且不必要。 |
在 .gitignore 加入 */.venv/、*/env/、*/conda-env/ 等。 |
| Python 版本不匹配 | 部署時使用不同的 Python 主版本(3.8 vs 3.10),可能出現語法或套件不相容。 | 在 requirements.txt 或 environment.yml 中明確寫入 python==3.x,或使用 conda create -n … python=3.x。 |
最佳實踐清單
- 專案根目錄即建立虛擬環境:
python -m venv .venv(或conda create -n <name>)。 - 將環境檔加入版本控制:
requirements.txt(pip)或environment.yml(conda)。 - CI/CD 流程中自動建立環境:使用
pip install -r requirements.txt或conda env create -f environment.yml。 - 使用
pip list --outdated定期檢查套件更新,但升級前先在測試環境驗證相容性。 - 避免在同一終端機同時啟動多個虛擬環境,會造成路徑混亂。使用
deactivate或conda deactivate退出。
實際應用場景
| 場景 | 建議工具 | 為什麼選擇 |
|---|---|---|
| 簡單腳本或小型專案 | venv + pip |
輕量、內建、無額外安裝成本。 |
| 需要同時支援 Python 2 與 3 | virtualenv |
支援多個 Python 版本,且可在舊系統上使用。 |
| 資料科學、機器學習 | conda (Anaconda/Miniconda) |
快速安裝大量科學套件(NumPy、Pandas、TensorFlow)且自帶優化的二進位檔。 |
| 跨平台團隊協作 | conda + environment.yml 或 pip + requirements.txt + CI |
明確的環境描述檔讓每位成員只要一條指令即可復原環境。 |
| 部署到容器(Docker) | 任意工具,但常見做法是 pip freeze 結合 Dockerfile |
在 Dockerfile 中直接 COPY requirements.txt && pip install -r requirements.txt,確保容器內部環境一致。 |
案例:一個 Flask API 專案
- 在專案根目錄執行
python -m venv .venv。source .venv/bin/activate後安裝Flask、gunicorn、python-dotenv。pip freeze > requirements.txt,將requirements.txt加入 Git。- Dockerfile 只需要
COPY requirements.txt /app/ && pip install -r /app/requirements.txt,即可保證容器內環境與本機相同。
總結
- pip 是 Python 套件的官方安裝工具,配合
requirements.txt可以輕鬆管理依賴。 - venv 為 Python 內建的虛擬環境解決方案,適合大部分新專案。
- virtualenv 提供跨版本支援,對於仍需維護 Python 2 或多版本環境的情況非常有用。
- conda 則是面向資料科學與跨語言需求的全能套件/環境管理器,特別適合需要大量二進位套件或 GPU 支援的專案。
掌握這四個工具的差異與使用時機,能讓你的 Python 開發流程更安全、可重現,也為日後的部署、測試與團隊協作奠定堅實基礎。祝你在 Python 的旅程中,玩得開心、寫得順手!