環境準備好後,接下來就要開始動手寫程式了。在 Linux 虛擬機裡開發,最常遇到的第一道難題通常不是寫 code,而是:「我要怎麼管理 Python 套件,才不會把虛擬機搞爛?」
今天我們就來聊聊為什麼不能隨便用 sudo pip install,以及如何用最標準、最乾淨的方式建立專案的「虛擬環境(venv)」。
1.為什麼不能直接在全域安裝套件?
在剛接觸 Linux 時,許多人習慣在需要第三方套件時直接執行:
sudo pip install <套件名稱> # 不建議的操作方式
在較新版本的 Ubuntu中,直接執行此指令通常會被系統阻擋,並顯示 externally-managed-environment 警告。
阻擋安裝的原因:
1.保護系統核心組件:Ubuntu 內建的許多系統服務(例如套件管理輔助工具、網路管理模組)本身即依賴系統 Python 環境。若透過 sudo pip 任意升級底層函式庫,容易破壞系統套件相依性,導致核心服務異常。
2.避免多專案版本衝突:不同專案對於套件版本的要求各異(例如專案 A 依賴舊版函式庫,專案 B 則需使用最新功能)。若全數安裝於全域環境,將無法維持多專案並存的穩定性。
最佳解法:應為每一個獨立專案建立專屬的「虛擬環境」,將套件依賴完全侷限在專案目錄內。
2.安裝虛擬環境管理工具
在 VS Code 終端機中執行以下指令
sudo apt update
sudo apt install -y python3-venv python3-pip
安裝完成後,確認 Python 3 與相關套件是否就緒:
python3 --version

3.建立獨立的專案虛擬環境
(1)建立並進入專案目錄
mkdir -p ~/projects/demo_project
cd ~/projects/demo_project
(2)初始化虛擬環境
python3 -m venv .venv
(建立完成後,專案目錄下會產生一個包含獨立 Python 執行檔與函式庫目錄的 .venv 資料夾)
4.虛擬環境的操作流程
虛擬環境建立後,必須明確切換(啟動)終端機上下文,才能將後續的執行與安裝導向至該環境。
(1)啟動虛擬環境
source .venv/bin/activate
which python #確認虛擬環境是否已成功啟動
(2)安裝專案依賴套件
進入虛擬環境後,即可安心使用一般使用者的權限進行套件安裝(無需且不應使用 sudo):
pip install requests
此時下載的所有檔案僅會存放於當前目錄的 .venv/lib/ 結構內,完全不影響外部系統環境。
(3)離開虛擬環境
當開發告一段落需切換至其他工作時,執行:
deactivate #目前先不用執行
終端機提示列就會回復為原本的預設狀態。
5.設定 Python 直譯器
透過 VS Code 進行開發時,需同步告知編輯器當前專案所使用的直譯器路徑,以確保語法高亮、程式碼跳轉與智慧補全功能正確讀取虛擬環境中的套件。
(1)在 VS Code 中使用「開啟資料夾」載入 ~/projects/demo_project。
(2)建立測試檔案 main.py 並寫入程式碼
import requests
response = requests.get("https://api.github.com")
print(f"Status Code: {response.status_code}")

(3)按下快捷鍵 Ctrl + Shift + P 開啟指令選擇區,搜尋並選擇:
Python: Select Interpreter。
(4)選擇系統自動偵測到的 .venv 環境(路徑通常顯示為 ./.venv/bin/python)。
清單中若只出現「全域 /usr/bin/python3」
1.點選清單中的 「輸入解譯器路徑... 」 。
2.接著點選 「尋找...」 。
3.在彈出的檔案選擇路徑中,依序點進去:
projects ➔ demo_project ➔ bin ➔ 點選 python3 (或 python)
選好後,VS Code 右下角的 Python 直譯器名稱就會從「全域」切換為我們剛建立的專案虛擬環境了。
6.產出與還原 requirements.txt
為了方便團隊協作或未來環境遷移,需將環境中的套件版本進行鎖定與記錄。
匯出套件清單
在虛擬環境啟動的狀態下執行:
pip freeze > requirements.txt
此指令會將當前環境中安裝的套件名稱與精確版本號寫入 requirements.txt。
還原與批次安裝
若將程式碼部署至其他主機,只需在建立並啟動新的虛擬環境後,執行以下指令即可完整復原開發環境:
pip install -r requirements.txt
|明日目標:開發環境就緒後,明天將透過一隻簡單的 Python 腳本,使用今日安裝的 requests 套件串接公開 API 抓取資料,實作在 VS Code 遠端環境下的執行與除錯流程。|