Python with VirtualEnv

近幾日研究了好一陣子的 VirtualEnv,這個 Python 套件自己用的情況很單純,但若要作為協作基底還真是個大坑!VirtualEnv 可將系統中的 Python 環境「複製」一份放在工作目錄中,以便管理執行環境。聽起來似乎好棒棒,好像可以整個資料夾打包帶走提供給其他人協作?就是這個假設讓我落入了大坑。

在這個莫名的假設下,可能會落入幾個大坑:

  • Visual Studio Code 的選擇直譯器(select interpreter)列表,不會出現別人創造的 VirtualEnv 虛擬環境可選。
  • Visual Studio Code 即便強制指定了 "python.pythonPath" 至 VirtualEnv 當中的 python.exe,狀態列依然顯示「Select Python Environment」。
    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

  1. 請先確認本機有安裝 Python,可以透過以下指令確認。
    若有正確印出版本即表示有正確安裝。
    $>python -V
    Python 3.X.X
  2. 將當前目錄切換至工作資料夾下,並建立 VirtualEnv 虛擬環境。
    若要複製本機所有套件環境:
    $> virtualenv env
    若要建立乾淨的環境:
    $> virtualenv --no-site-packages env
    此時會建立一「env」資料夾在工作目錄中。
  3. 進入該虛擬環境。
    $> env\Scripts\activate
  4. 若有需要,在虛擬環境中安裝所需套件。
    (env)$> pip install (套件名稱)
  5. 將套件清單匯出。
    (env)$> pip freeze > requirements.txt
  6. 離開虛擬環境。
    (env)$> env\Scripts\deactivate

 

  • 套用 requirements.txt 

  1. 同上述步驟1 至步驟3 進入虛擬環境
  2. 依據  requirements.txt 批次安裝套件
    (env)$> pip install -r requirements.txt
  3. 同上述步驟4 離開虛擬環境

參考資料:https://stackoverflow.com/questions/9586346/virtualenv-and-source-version-control

以上,打完收工!