近幾日研究了好一陣子的 VirtualEnv,這個 Python 套件自己用的情況很單純,但若要作為協作基底還真是個大坑!VirtualEnv 可將系統中的 Python 環境「複製」一份放在工作目錄中,以便管理執行環境。聽起來似乎好棒棒,好像可以整個資料夾打包帶走提供給其他人協作?就是這個假設讓我落入了大坑。
在這個莫名的假設下,可能會落入幾個大坑:
- Visual Studio Code 的選擇直譯器(select interpreter)列表,不會出現別人創造的 VirtualEnv 虛擬環境可選。
 - Visual Studio Code 即便強制指定了 "python.pythonPath" 至 VirtualEnv 當中的 python.exe,狀態列依然顯示「Select Python Environment」。

 
回歸正題,VirtualEnv 其實只能使用自己建立的那份環境。仔細看看 VirtualEnv 中的資料夾可以略見一二:
env\Lib\orig-prefix.txt當中記載著本機的 python 安裝路徑。而若此虛擬環境資料夾是由他人建立,會因該檔描述路徑可能不存在,故導致 vscode interpreter 列表不會出現此環境可選。env\Scripts\activate.bat當中的描述路徑是依據此 env 資料夾所在路徑產生。
那該如何利用 VirtualEnv 進行協作呢?
基本上要上載至 git repository 的只有透過 VirtualEnv 產出的 requirements.txt,其他虛擬環境檔案一概不須上載。以下說明如何產出 requirements.txt 及如何使用 requirements.txt。
- 
	
產出 requirements.txt
 
- 請先確認本機有安裝 Python,可以透過以下指令確認。
若有正確印出版本即表示有正確安裝。$>python -V Python 3.X.X - 將當前目錄切換至工作資料夾下,並建立 VirtualEnv 虛擬環境。
若要複製本機所有套件環境:
若要建立乾淨的環境:$> virtualenv env
此時會建立一「env」資料夾在工作目錄中。$> virtualenv --no-site-packages env - 進入該虛擬環境。
	
$> env\Scripts\activate - 若有需要,在虛擬環境中安裝所需套件。
	
(env)$> pip install (套件名稱) - 將套件清單匯出。
	
(env)$> pip freeze > requirements.txt - 離開虛擬環境。
	
(env)$> env\Scripts\deactivate 
- 
	
套用 requirements.txt
 
- 同上述步驟1 至步驟3 進入虛擬環境
 - 依據  requirements.txt 批次安裝套件
	
(env)$> pip install -r requirements.txt - 同上述步驟4 離開虛擬環境
 
參考資料:https://stackoverflow.com/questions/9586346/virtualenv-and-source-version-control
以上,打完收工!
