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)和一套獨立的已安裝套件。
使用虛擬環境的好處:
- 隔離依賴:為每個專案建立獨立的環境,避免套件版本衝突。
- 保持系統整潔:不會污染全域的 Python 環境。
- 方便協作:可以輕鬆地將專案的依賴列表(如
requirements.txt
)分享給他人,確保團隊成員使用相同的套件版本。
本文將專注於 Python 內建的 venv
模組,它簡單、可靠,是學習虛擬環境的最佳起點。
📦 venv
:Python 內建的標準選擇
venv
是 Python 3.3 版本之後內建的模組,無需額外安裝。對於大多數專案來說,它都是一個輕量且功能足夠的選擇。
步驟一:建立虛擬環境
在你專案的根目錄下,開啟終端機(Terminal)並執行以下指令,來建立一個名為 my_venv
的虛擬環境,當然也可選用其他名字。
# -m venv 表示執行 venv 模組
# my_venv 是你為虛擬環境指定的資料夾名稱
python -m venv my_venv
執行後,你會看到目錄下多了一個 my_venv
資料夾,裡面包含了這個獨立環境所需的 Python 解釋器、pip
工具和相關檔案。 建議將 \my_venv
加入到你的 .gitignore
檔案中,避免將它提交到版本控制系統。
步驟二:激活虛擬環境 (Activate)
建立環境後,你需要「激活 (啟動)」它才能進入這個隔離的空間。
Windows (CMD / PowerShell):
my_venv\Scripts\activate
macOS / Linux (bash / zsh):
source ./my_venv/bin/activate
啟動成功後,最明顯的標誌就是你的命令提示字元(Command Prompt)會發生變化。在路徑的前面會出現虛擬環境的名稱,例如 (my_venv)
。
# 激活虛擬環境
c:\my-project > my_venv\Scripts\activate
# 啟動後
(my_venv) c:\my-project >
這個提示符告訴你,現在你已經處於 my_venv
這個虛擬環境中,接下來的所有 pip
操作都只會影響到這個環境,而不會影響到系統的全域 Python 環境。
步驟三:使用 pip
管理套件
在啟動的環境中,你可以像平常一樣使用 pip
來安裝、查看和移除套件。
# 安裝 requests 套件
pip install requests
# 查看已安裝的套件,你會發現只有 requests 和它的依賴
pip list
# 卸載套件
pip uninstall requests
專案協作:使用 requirements.txt
(Optional)
為了讓其他開發者(或未來的你)能夠重建相同的開發環境,你需要建立一個依賴清單。
# 將當前環境已安裝的套件及其版本,匯出到 requirements.txt 檔案
pip freeze > requirements.txt
當其他人拿到你的專案後,他們只需建立自己的虛擬環境,然後執行以下指令即可安裝所有必要的套件:
# 從 requirements.txt 安裝所有指定的套件
pip install -r requirements.txt
步驟四:停用虛擬環境 (Deactivate)
當你完成工作,想退出當前的虛擬環境時,只需執行以下指令:
deactivate
執行後,命令提示字元前的 (my_venv)
字樣會消失,代表你已返回到系統的全域環境。
🚀 其他虛擬環境工具
venv
有一個明顯的限制:不能安裝或管理不同的 Python 版本。你用哪個 Python 版本去建立 venv
環境,該環境就會被鎖定在那個版本。如果你系統預設是 Python 3.11,但專案需要 Python 3.9,venv
就無能為力了。
我們還有其他選擇:
Miniconda
/Anaconda
:這是一個成熟且功能強大的環境與套件管理系統。長久以來,它都是數據科學領域的經典選擇,因為它能輕鬆建立及切換使用不同 Python 版本的環境,並能妥善處理複雜的科學計算套件依賴。uv
:這是一個更現代、速度極快的新興工具。它由 Rust 編寫,旨在成為pip
和venv
的一體化替代品。uv
不僅安裝套件的速度遠超傳統工具,它同樣支援自動下載和安裝你所指定的 Python 版本。其高效能和便利性,使其迅速成為追求效率的開發者的熱門選擇。
📝 總結
掌握虛擬環境是每個 Python 開發者都應具備的基礎技能。它能幫助你維持專案的獨立性和系統的整潔性,避免無數潛在的依賴問題。
對於剛入門或進行常規專案開發的使用者,venv
絕對是最佳選擇。它內建於 Python 中,簡單直接,能滿足絕大多數的需求。從今天起,為你的每個新專案都建立一個虛擬環境吧!