在現代 Python 開發中,全域安裝套件容易導致系統套件衝突,甚至在最新的 Linux/Ubuntu 系統中會直接跳出 externally-managed-environment 錯誤。因此,使用虛擬環境(Virtual Environment,簡稱 venv)來隔離不同專案的套件依賴已是標準的最佳實務。
本文將完整介紹在 Ubuntu (Linux) 與 Windows 系統中,如何從頭建立虛擬環境、啟用切換、安裝套件(如 caldav)以及排查常見的腳本執行問題。
1. 系統差異:bin 與 Scripts 資料夾
Python 建立虛擬環境後,會將獨立的 Python 執行檔與控制腳本放入特定的目錄中。兩大作業系統的目錄命名規則不同:
- Linux / Ubuntu / macOS:啟動腳本與執行檔位於
bin/資料夾中。 - Windows:啟動腳本與執行檔位於
Scripts\資料夾中。
💡 常見疑問:如果在 Windows 建立虛擬環境後找不到
bin資料夾,這是正常現象!請改看Scripts資料夾。
2. 第一步:建立 Python 虛擬環境
A. Ubuntu / Linux 系統
在 Ubuntu 中,系統預設的 Python 可能沒有預裝 venv 模組,建立前需要先透過 apt 安裝套件:
安裝必要工具:
sudo apt update sudo apt install python3-venv -y建立虛擬環境(假設資料夾名稱設為
.venv或myenv):python3 -m venv .venv
B. Windows 系統
Windows 安裝 Python 時通常已內建 venv 模組,直接在命令列執行:
python -m venv .venv
3. 第二步:啟用(切換進入)虛擬環境
切換虛擬環境時,必須根據您使用的命令列(Shell)選擇正確的指令。
先切換至專案目錄:
cd /path/to/your/project
Ubuntu / Linux 系統
使用 source 指令載入 bin 資料夾中的 activate 腳本:
source .venv/bin/activate
Windows 系統(依終端機類型區分)
1. 使用 PowerShell(VS Code 預設終端機)
PowerShell 必須執行 .ps1 副檔名的腳本:
.\.venv\Scripts\Activate.ps1
(若遇到「系統上已停用指令碼執行」錯誤,請參考文末排查說明)
2. 使用 Command Prompt(CMD 命令提示字元)
CMD 必須執行 .bat 副檔名的腳本:
.\.venv\Scripts\activate.bat
3. 使用 Git Bash / WSL
source .venv/Scripts/activate
4. 第三步:在虛擬環境中安裝套件與執行程式
當命令列最前方出現 (.venv) 或 (myenv) 提示時,表示已成功進入虛擬環境。
1. 安裝所需套件(例如 caldav)
此時執行的 pip 只會將套件安裝在該虛擬環境中,完全不會破壞系統環境:
pip install caldav
2. 執行 Python 腳本
python synctoreminder.py
3. 退出虛擬環境
開發完成後,隨時可以輸入以下指令退出:
deactivate
5. 常見問題與踩雷排查(Troubleshooting)
坑點一:Ubuntu 提示 No module named venv 或 error: externally-managed-environment
- 原因:Ubuntu 預設拆分了 Python 模組,且近期版本限制對全域 Python 使用
pip install。 - 解法:執行
sudo apt install python3-venv -y安裝venv支援後,即可透過虛擬環境安全地使用pip。
坑點二:在 Windows 的 PowerShell 中輸入 .\.venv\Scripts\activate.bat 完全沒反應也沒提示?
- 原因:PowerShell 執行 CMD 的
.bat檔時會在背景啟動臨時子程序,無法將環境變數套用回當前的 PowerShell。 - 解法:PowerShell 中請改用
.\.venv\Scripts\Activate.ps1。
坑點三:在 PowerShell 輸入 source 提示「無法辨識 ‘source’ 詞彙」
- 原因:
source為 Linux Bash 的內建指令,PowerShell 並不支援。 - 解法:在 PowerShell 中直接輸入腳本路徑
.\.venv\Scripts\Activate.ps1即可。
坑點四:PowerShell 報錯 PSSecurityException(在此系統上已停用指令碼執行)
原因:Windows PowerShell 預設安全策略限制執行未簽署的
.ps1腳本。解法:輸入以下指令解除當前終端機視窗的限制:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process執行完後再重新輸入
.\.venv\Scripts\Activate.ps1即可。
6. 進階補充:不安裝/不切換,直接調用虛擬環境 Python
如果在排程工作或腳本中不想手動 activate,可以直接指定虛擬環境內的 Python 執行檔路徑:
Windows:
.\.venv\Scripts\python.exe synctoreminder.pyUbuntu / Linux:
./.venv/bin/python synctoreminder.py
7. 結論與速查表
不管是 Windows 還是 Ubuntu,掌握虛擬環境的「建立、啟用、安裝」三步驟,即可徹底告別 Python 套件版本衝突的困擾:
| 操作步驟 | Ubuntu / Linux (Bash) | Windows (PowerShell) |
|---|---|---|
| 1. 準備工具 | sudo apt install python3-venv | (內建無需安裝) |
| 2. 建立環境 | python3 -m venv .venv | python -m venv .venv |
| 3. 啟用環境 | source .venv/bin/activate | .\.venv\Scripts\Activate.ps1 |
| 4. 安裝套件 | pip install <套件名稱> | pip install <套件名稱> |
| 5. 退出環境 | deactivate | deactivate |
