
在學習 Python 的初期,我們可能習慣直接用 pip install 把套件裝在全域環境。但隨著專案變多,你會發現:“A 專案需要 Django 3.0,B 專案需要 Django 4.0”,這時候全域環境就炸裂了 (Dependency Hell)。
解決方案就是 虛擬環境 (Virtual Environments):為每個專案建立獨立的 Python 樂園。
1. 內建工具:venv
Python 3.3+ 內建了 venv 模組,是最輕量的選擇。
建立與啟用
# 建立名為 .venv 的虛擬環境 (Mac/Linux)
python3 -m venv .venv
# 啟用環境
source .venv/bin/activate
# 啟用後,你的終端機提示字元前會出現 (.venv)
# 這時 pip install 只會裝在這個目錄下
pip install requests
# 離開環境
deactivate
匯出依賴
# 將當前環境的所有套件版本寫入檔案
pip freeze > requirements.txt
# 別人拿到你的專案時,安裝依賴
pip install -r requirements.txt
venv 雖然好用,但它無法解決「依賴的依賴」衝突問題,且 requirements.txt 管理起來有些簡陋。
2. 現代化神器:Poetry
Poetry 是目前 Python 社群最推薦的依賴管理與打包工具。它使用 pyproject.toml 這個新一代標準設定檔,解決了 setup.py, requirements.txt, Pipfile 分散的問題。
安裝 Poetry
curl -sSL https://install.python-poetry.org | python3 -
初始化專案
# 在現有專案中初始化
poetry init
# 它會引導你設定專案名稱、版本、作者等,並自動建立 pyproject.toml
新增套件
# 安裝 requests,Poetry 會自動解決版本衝突並更新 pyproject.toml
poetry add requests
# 安裝開發才用的套件 (如 pytest, black)
poetry add --group dev pytest
執行程式
Poetry 會自動管理虛擬環境,你不需要手動 activate。
# 在虛擬環境中執行 script.py
poetry run python script.py
Poetry vs Pipenv
雖然 Pipenv 曾經很紅,但 Poetry 在打包發布 (Publish to PyPI) 和 依賴解析速度 上表現更好,且格式更符合 PEP 標準。
3. 什麼是 pyproject.toml?
這是一個 TOML 格式的設定檔,旨在統一 Python 專案的配置。以後包含 Black (格式化)、Isort (排序 import)、Pytest (測試)、Mypy (型別) 的設定,通通都可以寫在這個檔案裡!
範例:
[tool.poetry]
name = "my-awesome-project"
version = "0.1.0"
description = ""
authors = ["Weichih <weichih@example.com>"]
[tool.poetry.dependencies]
python = "^3.10"
requests = "^2.31.0"
[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
4. 總結
一個專業的 Python 專案,必備以下結構:
- 虛擬環境:隔離依賴,不汙染系統。
- pyproject.toml:單一設定檔管理所有工具。
- 鎖定檔 (poetry.lock):確保所有人安裝的套件版本 100% 一致。
Batch 5 (Modern Python Development) 重點回顧:
- Ch 21: Type Hints 讓程式碼更健壯。
- Ch 22: Threading vs Multiprocessing 征服並發。
- Ch 23: AsyncIO 榨乾單執行緒效能。
- Ch 24: Requests 串接 API。
- Ch 25: Poetry 與 venv 管理專案。
恭喜你!你已經具備了中高階 Python 開發者的實力。你可以寫出效能好、結構佳、易維護的現代化 Python 程式碼了。
下一階段,我們將進入 Batch 6 (Data Science & AI Foundations),這是 Python 最發光發熱的領域!我們將探索 NumPy, Pandas 與 Matplotlib。
延伸閱讀: