本文 AI 產出,尚未審核

Python 基礎概念(Fundamentals)

主題:pip 與虛擬環境(venv / virtualenv / conda)


簡介

在開發 Python 專案時,套件管理執行環境的隔離是最常碰到的兩大挑戰。
如果直接在全域 (global) Python 中安裝第三方套件,往往會導致版本衝突、依賴不一致,甚至影響系統其他程式的正常運作。

pipvenvvirtualenvconda 正是為了解決這些問題而誕生的工具。
掌握它們的使用方法,不僅能讓你的程式碼在不同機器上保持一致,也能在多人協作或部署時降低「在我機器上可以跑」的風險。


核心概念

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),此時執行的 pythonpip 都是虛擬環境內的版本。

範例 2:在 venv 中安裝套件並產生 requirements

# 假設已在虛擬環境內
pip install pandas numpy matplotlib

# 把當前環境的套件寫入 requirements.txt
pip freeze > requirements.txt

3. virtualenv:跨版本的虛擬環境解決方案

  • virtualenv 是在 venv 出現前最常用的第三方套件,支援 Python 2Python 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 等語言的套件。

  • 特色:

    1. 二進位套件(如 NumPy、SciPy)直接下載,不需要自行編譯。
    2. 可以同時管理 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 把虛擬環境資料夾(如 .venvenv/)加入版本控制,導致 repo 龐大且不必要。 .gitignore 加入 */.venv/*/env/*/conda-env/ 等。
Python 版本不匹配 部署時使用不同的 Python 主版本(3.8 vs 3.10),可能出現語法或套件不相容。 requirements.txtenvironment.yml 中明確寫入 python==3.x,或使用 conda create -n … python=3.x

最佳實踐清單

  1. 專案根目錄即建立虛擬環境python -m venv .venv(或 conda create -n <name>)。
  2. 將環境檔加入版本控制requirements.txt(pip)或 environment.yml(conda)。
  3. CI/CD 流程中自動建立環境:使用 pip install -r requirements.txtconda env create -f environment.yml
  4. 使用 pip list --outdated 定期檢查套件更新,但升級前先在測試環境驗證相容性。
  5. 避免在同一終端機同時啟動多個虛擬環境,會造成路徑混亂。使用 deactivateconda deactivate 退出。

實際應用場景

場景 建議工具 為什麼選擇
簡單腳本或小型專案 venv + pip 輕量、內建、無額外安裝成本。
需要同時支援 Python 2 與 3 virtualenv 支援多個 Python 版本,且可在舊系統上使用。
資料科學、機器學習 conda (Anaconda/Miniconda) 快速安裝大量科學套件(NumPy、Pandas、TensorFlow)且自帶優化的二進位檔。
跨平台團隊協作 conda + environment.ymlpip + requirements.txt + CI 明確的環境描述檔讓每位成員只要一條指令即可復原環境。
部署到容器(Docker) 任意工具,但常見做法是 pip freeze 結合 Dockerfile 在 Dockerfile 中直接 COPY requirements.txt && pip install -r requirements.txt,確保容器內部環境一致。

案例:一個 Flask API 專案

  1. 在專案根目錄執行 python -m venv .venv
  2. source .venv/bin/activate 後安裝 Flaskgunicornpython-dotenv
  3. pip freeze > requirements.txt,將 requirements.txt 加入 Git。
  4. Dockerfile 只需要 COPY requirements.txt /app/ && pip install -r /app/requirements.txt,即可保證容器內環境與本機相同。

總結

  • pip 是 Python 套件的官方安裝工具,配合 requirements.txt 可以輕鬆管理依賴。
  • venv 為 Python 內建的虛擬環境解決方案,適合大部分新專案。
  • virtualenv 提供跨版本支援,對於仍需維護 Python 2 或多版本環境的情況非常有用。
  • conda 則是面向資料科學與跨語言需求的全能套件/環境管理器,特別適合需要大量二進位套件或 GPU 支援的專案。

掌握這四個工具的差異與使用時機,能讓你的 Python 開發流程更安全可重現,也為日後的部署、測試與團隊協作奠定堅實基礎。祝你在 Python 的旅程中,玩得開心、寫得順手!