Featured image of post Windows 與 Ubuntu 建立與切換 Python 虛擬環境完整教學與避坑指南

Windows 與 Ubuntu 建立與切換 Python 虛擬環境完整教學與避坑指南

詳解 Windows 與 Ubuntu 下如何建立與啟用 Python 虛擬環境、系統相依套件安裝,以及 PowerShell 腳本權限與 activate.bat 無反應等常見問題排查。

在現代 Python 開發中,全域安裝套件容易導致系統套件衝突,甚至在最新的 Linux/Ubuntu 系統中會直接跳出 externally-managed-environment 錯誤。因此,使用虛擬環境(Virtual Environment,簡稱 venv)來隔離不同專案的套件依賴已是標準的最佳實務。

本文將完整介紹在 Ubuntu (Linux)Windows 系統中,如何從頭建立虛擬環境、啟用切換、安裝套件(如 caldav)以及排查常見的腳本執行問題。


1. 系統差異:binScripts 資料夾

Python 建立虛擬環境後,會將獨立的 Python 執行檔與控制腳本放入特定的目錄中。兩大作業系統的目錄命名規則不同:

  • Linux / Ubuntu / macOS:啟動腳本與執行檔位於 bin/ 資料夾中。
  • Windows:啟動腳本與執行檔位於 Scripts\ 資料夾中。

💡 常見疑問:如果在 Windows 建立虛擬環境後找不到 bin 資料夾,這是正常現象!請改看 Scripts 資料夾。


2. 第一步:建立 Python 虛擬環境

A. Ubuntu / Linux 系統

在 Ubuntu 中,系統預設的 Python 可能沒有預裝 venv 模組,建立前需要先透過 apt 安裝套件:

  1. 安裝必要工具

    sudo apt update
    sudo apt install python3-venv -y
    
  2. 建立虛擬環境(假設資料夾名稱設為 .venvmyenv):

    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 venverror: 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.py
    
  • Ubuntu / 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 .venvpython -m venv .venv
3. 啟用環境source .venv/bin/activate.\.venv\Scripts\Activate.ps1
4. 安裝套件pip install <套件名稱>pip install <套件名稱>
5. 退出環境deactivatedeactivate