近幾日研究了好一陣子的 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
$> 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
以上,打完收工!