在學習 Python 的時候,很多初學者只專注於語言和它的函式庫,完全忽略了虛擬環境。因此,管理 Python 專案可能會變得非常混亂:不同專案安裝的依賴可能會有版本衝突,導致相容性問題。
即使我在學習 Python 的時候,沒有人強調虛擬環境的重要性,這讓我現在覺得很奇怪。虛擬環境是一個非常有用的工具,可以將不同的專案隔離開來。
在這篇文章中,我將解釋虛擬環境的運作方式,提供幾個例子,並分享一些管理虛擬環境的有用指令。
問題
想像一下,你的筆記本電腦上有兩個 Python 專案,分別位於不同的資料夾。你發現需要為第一個專案安裝最新版本的函式庫 A。後來,你切換到第二個專案,想要安裝函式庫 B。
問題來了:函式庫 B 依賴於函式庫 A,但它需要的版本和你之前安裝的版本不同。
因為你沒有使用任何依賴管理工具,所有的依賴都是全局安裝在你的電腦上。由於函式庫 A 的版本不相容,你在嘗試安裝函式庫 B 時遇到了錯誤。
解決方案
為了避免這樣的問題,虛擬環境就派上用場了。其想法是為每個 Python 專案分配一個獨立的儲存空間。每個儲存空間將包含特定專案的所有外部下載依賴,以隔離的方式進行管理。
更具體地說,如果我們在兩個專案的虛擬環境中下載相同的函式庫 A,函式庫 A 將會被下載兩次——每個環境各一次。此外,因為每個環境是完全隔離的,所以函式庫的版本可以在不同環境中有所不同。
現在,虛擬環境的使用動機已經清楚了,讓我們來看看如何在 Python 中創建虛擬環境。
Python 中的虛擬環境
建議在專案的根目錄中創建虛擬環境。使用以下指令在終端中創建環境:
python -m venv <environment_name>
根據慣例,<environment_name> 通常命名為 venv,因此指令變為:
python -m venv venv
這樣,這個指令會創建一個名為 venv 的資料夾,裡面包含虛擬環境本身。雖然可以進入該資料夾,但在大多數情況下這不是很有用,因為 venv 資料夾主要包含不打算直接使用的系統腳本。
要啟動虛擬環境,使用以下指令:
source venv/bin/activate
一旦環境被啟動,我們就可以為專案安裝依賴。只要 venv 被啟動,任何安裝的依賴都只屬於該環境。
要停用虛擬環境,輸入:
deactivate
一旦環境被停用,終端會恢復到正常狀態。例如,你可以切換到另一個專案並在那裡啟動它的環境。
依賴管理
安裝函式庫
在安裝任何依賴之前,建議先啟動虛擬環境,以確保安裝的函式庫屬於單一專案。這有助於避免全局版本衝突。
最常用的依賴管理指令是 pip。與其他替代方案相比,pip 直觀且易於使用。
要安裝一個函式庫,輸入:
pip install <library_name>
在下面的例子中,我將使用 pandas(最常用的數據分析函式庫)來替代 <library_name>。
例如,如果我們想下載最新版本的 pandas,我們應該輸入:
pip install pandas
在某些情況下,我們可能需要安裝特定版本的函式庫。pip 提供了一個簡單的語法來做到這一點:
pip install pandas==2.1.4 # 安裝版本 2.1.4 的 pandas
pip install pandas>=2.1.4 # 安裝版本 2.1.4 或更高版本的 pandas
pip install pandas<2.1.4 # 安裝版本低於 2.1.4 的 pandas
pip install pandas>=2.1.2,<2.2.4 # 安裝 2.1.2 和 2.2.4 之間的最新版本
查看依賴詳情
如果你對某個已安裝的依賴感興趣,可以使用 pip show 指令來獲取更多信息:
pip show pandas
例如,上面的指令將輸出以下信息:

刪除依賴
要從虛擬環境中刪除一個依賴,使用以下指令:
pip uninstall pandas
執行這個指令後,與指定函式庫相關的所有檔案將被刪除,從而釋放磁碟空間。然而,如果你再次運行一個導入這個函式庫的 Python 程式,你將會遇到 ImportError。
需求檔案
管理依賴的一個常見做法是創建一個 requirements.txt 檔案,該檔案包含專案中所有下載的依賴及其版本的列表。以下是它的範例:
fastapi==0.115.5
pydantic==2.10.1
PyYAML==6.0.2
requests==2.32.3
scikit-learn==1.5.2
scipy==1.14.1
seaborn==0.13.2
streamlit==1.40.2
torch==2.5.1
torchvision==0.20.1
tornado==6.4.2
tqdm==4.67.1
urllib3==2.2.3
uvicorn==0.32.1
yolo==0.3.2
理想情況下,每次使用 pip install 指令時,應該在 requirements.txt 檔案中添加相應的行,以跟蹤專案中使用的所有函式庫。
但是,如果你忘記這樣做,還有另一個選擇:pip freeze 指令會輸出專案中所有已安裝的依賴。不過,pip freeze 可能會非常冗長,經常包括許多其他函式庫的名稱,這些函式庫是你在專案中使用的函式庫的依賴。
pip freeze > requirements.txt
因此,將已安裝的需求及其版本添加到 requirements.txt 檔案中是一個好習慣。
每當你克隆一個 Python 專案時,預期要求 requirements.txt 檔案已經存在於 Git 倉庫中。要安裝此檔案中列出的所有依賴,可以使用 pip install 指令,並加上 -r 標誌,後面跟著需求檔案的名稱。
pip install -r requirements.txt
相反,每當你在 Python 專案上工作時,應該創建一個 requirements.txt 檔案,以便其他合作者可以輕鬆安裝所需的依賴。
.gitignore
在使用版本控制系統時,虛擬環境絕對不應該被推送到 Git!相反,它們必須在 .gitignore 檔案中提到。
虛擬環境往往非常大,如果已經有 requirements.txt 檔案,下載所有必要的依賴應該不會有問題。
結論
在這篇文章中,我們探討了虛擬環境這個非常重要的概念。通過為不同專案隔離下載的依賴,它們使得管理多個 Python 專案變得更加容易。
所有圖片均由作者提供,除非另有說明。
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!