Python 虛擬環境教學:venv、virtualenv、conda 完整比較與實戰指南
寫 Python 寫到一半,突然發現套件版本衝突、專案跑不起來——這種經驗你一定有過吧?我自己剛開始學 Python 的時候,根本不知道什麼是虛擬環境,結果搞到系統 Python 一團亂,最後只好整個重灌。後來才知道,原來虛擬環境就是解決這個問題的關鍵工具。
今天這篇文章,我會帶你完整了解 Python 虛擬環境的概念,並且實際比較 venv、virtualenv 和 conda 這三種最常用的方案,讓你可以根據自己的需求選擇最適合的工具。
什麼是 Python 虛擬環境?為什麼你需要它?
簡單來說,虛擬環境就是一個獨立的 Python 執行空間。每個虛擬環境都有自己的 Python 直譯器和套件庫,彼此之間互不干擾。
想像一下這個場景:你手上有兩個專案,A 專案需要 Django 3.2,B 專案需要 Django 4.1。如果沒有虛擬環境,你只能在系統裡裝一個版本的 Django,這樣另一個專案就跑不動了。但有了虛擬環境,每個專案都可以有自己的 Django 版本,完全不會打架。
使用虛擬環境的好處包括:
- 避免套件版本衝突:不同專案可以使用不同版本的套件
- 保持系統 Python 乾淨:不會把一堆有的沒的套件裝到系統環境
- 方便部署:可以精確記錄專案需要的所有套件和版本
- 團隊協作更順暢:每個人的開發環境都能保持一致
venv:Python 內建的虛擬環境工具
從 Python 3.3 開始,venv 就被納入標準函式庫了,所以你不用額外安裝任何東西。這也是我最推薦新手使用的工具,因為它簡單、輕量、夠用。
建立與啟動 venv 虛擬環境
建立虛擬環境非常簡單,只需要一行指令:
python -m venv myenv這會在當前目錄下建立一個叫做 myenv 的資料夾,裡面包含了獨立的 Python 直譯器和 pip。
啟動虛擬環境的方式因作業系統而異:
# Windows
myenv\Scripts\activate
# macOS / Linux
source myenv/bin/activate啟動成功後,你會看到終端機前面多了一個 (myenv) 的提示,代表你現在正在虛擬環境裡。在這個狀態下用 pip 安裝的套件,都只會裝在這個虛擬環境中。
管理 venv 中的套件
在虛擬環境中,你可以正常使用 pip 來管理套件:
# 安裝套件
pip install requests flask
# 匯出套件清單
pip freeze > requirements.txt
# 從清單安裝套件(常用於部署或團隊協作)
pip install -r requirements.txt
# 離開虛擬環境
deactivate說真的,對大多數 Python 開發者來說,venv 就已經很夠用了。如果你是在做 Web 開發,比如使用 Python FastAPI 建立 REST API,venv 完全能勝任。
virtualenv:功能更強的第三方工具
virtualenv 是比 venv 更早出現的第三方虛擬環境工具,它的功能比 venv 更豐富,速度也更快。
virtualenv 和 venv 的差異
雖然 venv 已經很好用了,但 virtualenv 有一些額外的優勢:
- 建立速度更快:virtualenv 會快取已安裝的套件,重複建立環境時速度明顯更快
- 支援 Python 2:如果你還需要維護 Python 2 的舊專案(希望你不用),virtualenv 是唯一選擇
- 更多自訂選項:可以指定不同的 Python 版本來建立環境
- 跨平台一致性更好:在不同作業系統上的行為更一致
安裝和使用方式如下:
# 安裝 virtualenv
pip install virtualenv
# 建立虛擬環境
virtualenv myenv
# 指定 Python 版本
virtualenv -p python3.11 myenv啟動和離開的方式跟 venv 一模一樣,所以切換過來幾乎沒有學習成本。
conda:資料科學的好朋友
如果你是做資料科學、機器學習相關的工作,那 conda 可能是更好的選擇。它不只能管理 Python 套件,還能管理其他語言的套件和系統級的依賴。
conda 基本操作
# 建立虛擬環境(可以指定 Python 版本)
conda create -n myenv python=3.11
# 啟動虛擬環境
conda activate myenv
# 安裝套件
conda install numpy pandas scikit-learn
# 匯出環境
conda env export > environment.yml
# 從設定檔還原環境
conda env create -f environment.yml
# 離開環境
conda deactivateconda 特別適合需要安裝像 NumPy、SciPy 這類有複雜 C 語言依賴的套件。如果你正在學習 Python Pandas 資料分析,用 conda 來管理環境會省掉很多麻煩。
conda 和 pip 可以混用嗎?
可以,但要小心。我的建議是:盡量先用 conda 安裝套件,找不到的再用 pip。混用的時候,順序很重要——先 conda 後 pip,不要反過來,否則可能會出現依賴衝突的問題。
三種工具的比較:該選哪一個?
我幫你整理了一個簡單的對照表:
- venv:適合一般 Python 開發、Web 開發,優點是內建不用額外安裝,缺點是功能較基本
- virtualenv:適合需要更多彈性的開發者,優點是速度快、功能多,缺點是需要額外安裝
- conda:適合資料科學和機器學習,優點是可以管理非 Python 依賴,缺點是佔用空間較大
我個人的經驗是:如果你是做 Web 開發或寫自動化腳本(例如 Python APScheduler 排程自動化),用 venv 就夠了;如果是資料科學相關,就直接上 conda。
虛擬環境的最佳實踐
用了這麼多年虛擬環境,我整理了幾個實用的建議:
- 每個專案都建立獨立的虛擬環境:不要偷懶共用,遲早會出問題
- 把虛擬環境資料夾加入 .gitignore:虛擬環境不應該被版本控制,只需要追蹤 requirements.txt 或 environment.yml
- 定期更新 requirements.txt:每次新增或移除套件後,記得更新套件清單
- 使用有意義的環境名稱:不要都叫 env 或 venv,用專案名稱來命名比較好辨識
- 考慮使用 poetry 或 pipenv:如果你的專案比較複雜,這些進階的套件管理工具可以提供更好的依賴管理
常見問題與排除
虛擬環境啟動失敗
Windows 使用者最常遇到的問題是 PowerShell 執行策略的限制。你可以用以下指令暫時解除:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserpip 裝到系統環境去了
有時候你以為自己在虛擬環境裡,但其實已經 deactivate 了。安裝套件前,養成習慣先確認:
# 確認目前使用的 Python 路徑
which python # macOS/Linux
where python # Windows如果顯示的路徑不是虛擬環境的資料夾,那就代表你不在虛擬環境中。
總結
虛擬環境是每個 Python 開發者都必須掌握的基本功。不管你是剛入門的新手,還是已經有經驗的開發者,養成「一個專案一個虛擬環境」的好習慣,絕對能讓你省下大量除錯的時間。venv 簡單好上手、virtualenv 功能更強大、conda 則是資料科學的首選——選擇適合你的工具,然後好好享受乾淨的開發環境吧!
繼續閱讀
Python 裝飾器 Decorator 從入門到進階:用實例搞懂這個神奇語法
Python 裝飾器看起來很神奇,但其實原理不難。從基礎語法到進階用法,帶你用實例徹底搞懂 Decorator。
相關文章
你可能也喜歡
探索其他領域的精選好文