Python 開發好幫手 – virtualenv

許多開發者常會使用 schroot 去管理不同的獨立環境來符合自己的開發與編譯上的需求。
在 Python 的世界也有類似的工具 – virtualenv[1],可以讓使用 Python 的開發者方便快速的建立各自獨立的虛擬環境。在獨立的虛擬環境中開發 Python 程式,可以降低各個環境中的套件數量,也降低了不同版本套件間衝突的可能。

Python 開發好幫手 – virtualenv

安裝

使用者可以透過 Python 的 easy_install 工具安裝,或直接以 Ubuntu[2]apt-get 安裝。

$ sudo easy_install virtualenv

$ sudo apt-get install python-virtualenv

 

建立虛擬環境

要建立虛擬環境,只需要輸入以下命令,就能建立名為 .env 的虛擬環境。
使用者可以建立許多不同的虛擬環境去對應各種不同的 Python 環境需求。

$ virtualenv .env

 

啟動虛擬環境

建立虛擬環境之後,就可以透過以下命令啟動它了。

$ source .env/bin/activate
(.env)...$

啟動之後可以發現 shell 的提示字元前出現了虛擬環境的名稱,讓我們方便確認現在正使用哪個虛擬環境。

如果不需要提示,可以在啟動命令前加上 VIRTUAL_ENV_DISABLE_PROMPT=1,這樣就不會在提示字元前多出名稱提示。

$ VIRTUAL_ENV_DISABLE_PROMPT=1 source .env/bin/activate

啟動虛擬環境除了會換掉 $PATH 以及提示字元,還會把安裝的套件放到 .env/lib/pythonX.X/site-packages 目錄下,當虛擬環境中的 Python 執行時,就會使用自己環境下的套件。所以使用者可以在不同的虛擬環境中安裝個別需要的套件。

退出虛擬環境

當不需要在目前的虛擬環境中作業時,直接輸入以下命令,就可以退出目前的虛擬環境、回到系統預設的環境中。

$ deactivate

 

指定 Python 版本

如果在系統中安裝有多個版本的 Python (例如 2.7 及 3.2 版),就可以透過 --python 參數去指定建立的虛擬環境要使用哪個版本。

$ virtualenv .env3 --python=python3.2

透過這個參數,可以建立不同版本的 Python 執行環境,並且在其中快速的切換。

實際範例

以下就以 Python2.7 、 yolk[3] 和 pep8[4] 做為虛擬環境的範例。
首先建立並啟動虛擬環境,接著安裝 yolk,最後用 yolk 觀察資訊。

$ virtualenv .env
$ source .env/bin/activate
$ easy_install yolk
$ yolk -a

這時應該可以看到 Python 及 yolk 等套件的資訊。
我們可以繼續嘗試安裝 pep8 並觀察資訊。

$ easy_install pep8
$ yolk -a

安裝完成之後,螢幕上可以顯示出剛裝好的 pep8 資訊。
在操作過程中,我們同時可以在回應的訊息中發現套件會被裝到虛擬環境中的 site-packages 目錄。

$ ls .env/lib/python2.7/site-packages

最後用以下命令離開虛擬環境。

$ deactivate

離開虛擬環境之後,如果在原先的系統中沒有裝過 yolk 及 pep8,就無法使用這兩個工具。

總結

在了解了 virtualenv 的使用之後,我們發現到利用這個工具可以隔離出不同的 Python 環境,藉此避免汙染其他的 Python 環境及系統環境。
因此除了可以應用在軟體開發之外,也能在測試環境中,用來建立出乾淨的虛擬環境,其中只安裝必要的相依套件進行測試,把可能的環境影響降到最低。
尤其像是 gaia-ui-tests[5] 這樣需要相依其他套件的專案,使用到的套件們可能在其他專案中需要使用不同版本,往往會造成衝突,徒增開發時的困擾,這時候 virtualenv 就可以派上用場了。

附註:

  • [1] 您可以從 virtualenv 官方網站 找到更多資訊。
  • [2] 本文系統環境為 Ubuntu 12.04 LTS
  • [3]yolk 是查詢已安裝 Python 套件資訊的工具套件。
  • [4]pep8 是檢查 Python 程式碼是否符合 PEP8 的檢查工具套件。
  • [5]gaia-ui-tests 是一套特別設計來撰寫 Gaia 測試的 Python 套件,
    您可以從 MDN 找到更多資訊。。