Skip to content

Python 虛擬環境

Python 有龐大的公共套件生態。這些公開的免費套件,使我們無需從零開始編寫所有功能,大大縮短開發時間。要使用這些外部套件,我們通常會透過 pip 指令來安裝。

預設情況下,當你執行 pip install,套件會被安裝到你系統的主要 Python 環境中,與 Python 解釋器放在一起。然而,有一個更好的做法:為你的專案建立一個全新的「虛擬環境」。這是一個專屬於你目前專案的獨立空間,裡面包含了一份獨立的 Python 解釋器,以及該專案所需要的所有套件。

🤔 為什麼需要 Python 虛擬環境?

開發 Python 程式時,你可能會直接使用 pip install <package-name> 將各種套件(package)安裝到系統的全域環境中。當你只有一個專案時,這似乎沒什麼問題。

但想像一下這個場景:

  • 專案 A 是一個舊的數據分析腳本,依賴 Numpy 1.19 版本。
  • 專案 B 是一個新的機器學習模型,需要 Numpy 1.26 的最新功能。

如果你在全域環境中安裝了 Numpy 1.26,專案 A 可能會因為函式庫改動而無法運行。反之,若保留 Numpy 1.19,則無法開發專案 B。這就是「依賴衝突」(dependency conflict)問題。

虛擬環境(Virtual Environment) 就是為了解決這個問題而生的。它是一個獨立、隔離的 Python 運行環境,每個環境都有自己的 Python 解釋器(interpreter)和一套獨立的已安裝套件。

使用虛擬環境的好處:

  1. 隔離依賴:為每個專案建立獨立的環境,避免套件版本衝突。
  2. 保持系統整潔:不會污染全域的 Python 環境。
  3. 方便協作:可以輕鬆地將專案的依賴列表(如 requirements.txt)分享給他人,確保團隊成員使用相同的套件版本。

本文將專注於 Python 內建的 venv 模組,它簡單、可靠,是學習虛擬環境的最佳起點。

📦 venv:Python 內建的標準選擇

venv 是 Python 3.3 版本之後內建的模組,無需額外安裝。對於大多數專案來說,它都是一個輕量且功能足夠的選擇。

步驟一:建立虛擬環境

在你專案的根目錄下,開啟終端機(Terminal)並執行以下指令,來建立一個名為 my_venv 的虛擬環境,當然也可選用其他名字。

bash
# -m venv 表示執行 venv 模組
# my_venv 是你為虛擬環境指定的資料夾名稱
python -m venv my_venv

執行後,你會看到目錄下多了一個 my_venv 資料夾,裡面包含了這個獨立環境所需的 Python 解釋器、pip 工具和相關檔案。 建議將 \my_venv 加入到你的 .gitignore 檔案中,避免將它提交到版本控制系統。

步驟二:激活虛擬環境 (Activate)

建立環境後,你需要「激活 (啟動)」它才能進入這個隔離的空間。

Windows (CMD / PowerShell):

powershell
my_venv\Scripts\activate

macOS / Linux (bash / zsh):

bash
source ./my_venv/bin/activate

啟動成功後,最明顯的標誌就是你的命令提示字元(Command Prompt)會發生變化。在路徑的前面會出現虛擬環境的名稱,例如 (my_venv)

powershell
# 激活虛擬環境
c:\my-project > my_venv\Scripts\activate

# 啟動後
(my_venv) c:\my-project >

這個提示符告訴你,現在你已經處於 my_venv 這個虛擬環境中,接下來的所有 pip 操作都只會影響到這個環境,而不會影響到系統的全域 Python 環境。

步驟三:使用 pip 管理套件

在啟動的環境中,你可以像平常一樣使用 pip 來安裝、查看和移除套件。

bash
# 安裝 requests 套件
pip install requests

# 查看已安裝的套件,你會發現只有 requests 和它的依賴
pip list

# 卸載套件
pip uninstall requests

專案協作:使用 requirements.txt (Optional)

為了讓其他開發者(或未來的你)能夠重建相同的開發環境,你需要建立一個依賴清單。

bash
# 將當前環境已安裝的套件及其版本,匯出到 requirements.txt 檔案
pip freeze > requirements.txt

當其他人拿到你的專案後,他們只需建立自己的虛擬環境,然後執行以下指令即可安裝所有必要的套件:

bash
# 從 requirements.txt 安裝所有指定的套件
pip install -r requirements.txt

步驟四:停用虛擬環境 (Deactivate)

當你完成工作,想退出當前的虛擬環境時,只需執行以下指令:

bash
deactivate

執行後,命令提示字元前的 (my_venv) 字樣會消失,代表你已返回到系統的全域環境。

🚀 其他虛擬環境工具

venv 有一個明顯的限制:不能安裝或管理不同的 Python 版本。你用哪個 Python 版本去建立 venv 環境,該環境就會被鎖定在那個版本。如果你系統預設是 Python 3.11,但專案需要 Python 3.9,venv 就無能為力了。

我們還有其他選擇:

  • Miniconda / Anaconda:這是一個成熟且功能強大的環境與套件管理系統。長久以來,它都是數據科學領域的經典選擇,因為它能輕鬆建立及切換使用不同 Python 版本的環境,並能妥善處理複雜的科學計算套件依賴。

  • uv:這是一個更現代、速度極快的新興工具。它由 Rust 編寫,旨在成為 pipvenv 的一體化替代品。uv 不僅安裝套件的速度遠超傳統工具,它同樣支援自動下載和安裝你所指定的 Python 版本。其高效能和便利性,使其迅速成為追求效率的開發者的熱門選擇。

📝 總結

掌握虛擬環境是每個 Python 開發者都應具備的基礎技能。它能幫助你維持專案的獨立性和系統的整潔性,避免無數潛在的依賴問題。

對於剛入門或進行常規專案開發的使用者,venv 絕對是最佳選擇。它內建於 Python 中,簡單直接,能滿足絕大多數的需求。從今天起,為你的每個新專案都建立一個虛擬環境吧!

📚 參考資料

KF Software House