聊聊 virtualenv 和 virtualenvwrapper 實踐

冰雪殿發表於2015-12-01

各位 Python 的小夥伴肯定多多少少接觸過 virtualenv。本文將介紹 virtualenv 以及如何更科學更優雅地使用 virtualenv。

virtualenv

首先來聊一下 virtualenv 是個什麼鬼。

在使用 Python 開發的過程中,工程一多,難免會碰到不同的工程依賴不同版本的庫的問題;亦或者是在開發過程中不想讓物理環境裡充斥各種各樣的庫,引發未來的依賴災難。此時,我們需要對於不同的工程使用不同的虛擬環境來保持開發環境以及宿主環境的清潔。這裡,就要隆重介紹 virtualenv,一個可以幫助我們管理不同 Python 環境的絕好工具。virtualenv 可以在系統中建立多個不同並且相互不干擾的虛擬環境。另外,值得一提的是,在 virtualenv 的虛擬環境中使用 pip 安裝依賴還可以繞過某些系統的許可權設定,因為畢竟不需要向系統目錄寫入資料嘛~~

那麼,virtualenv 是怎麼執行的呢?

安裝

首先從安裝講起,這裡假設已經安裝了 pip,如果沒有安裝 pip 的話,請自行出門谷歌(好吧,我是好人,附上pip官方文件連結)。之後就可以用 pip 來直接安裝 virtualenv 了。當然,這裡可能是需要使用 sudo 提升許可權的,畢竟是在宿主物理環境裡安裝。如下命令中 sudo 省略,如有需求請自行新增。

pip install virtualenv

好了現在你擁有了 virtualenv 虛擬環境管理器。

使用

接下來說使用。

比如我們想要做一點奇怪的事情,寫一個指令碼去抓取某個網站的資訊,我們暫且把這個工程叫做 spider 吧。這個工程裡需要訪問網路,我們打算使用為人類編寫的網路訪問庫 requests,但是我們又不想在宿主環境中安裝這個包。讓我們開始吧。

假設我們把這個工程放在 /path/to/project/spider/ 目錄下,並且這裡我們把虛擬環境直接放在工程目錄下。首先,我們在這個目錄下建立一個虛擬環境。

virtualenv /path/to/project/spider

這樣,虛擬環境就建立好了。此時可以看到,在這個目錄下面會有三個目錄被建立:

  • bin

  • include

  • lib

其中,bin 目錄中包含一些在這個虛擬環境中可用的命令,以及開啟虛擬環境的指令碼 activateinclude 中包含虛擬環境中的標頭檔案,包括 Python 的標頭檔案;lib 中就是一些依賴庫啦~~

當然,現在我們還沒有進入到虛擬環境中。啟用虛擬環境只需要一條命令。

source /path/to/project/spider/bin/activate

此時就可以我們就已經在虛擬環境中啦。

接下來安裝工程需要的 requests 庫。

pip install requests

搞定!

這時候在虛擬環境裡就有了 requests 庫,宿主環境中則不會被干擾。

那麼如何退出虛擬環境嘞?退出就更簡單啦,只需要下面一個命令就搞定啦。

deactivate

此時就回到了進入虛擬環境之前,一切都好像沒發生過。多年以後,如果你忘記了虛擬環境的位置,一切就真的沒發生過了 = =

補充一句,如果想要刪除虛擬環境,只要把這個目錄下的 binincludelib 三個目錄刪掉就好了。

virtualenvwrapper

為神馬需要 virtualenvwrapper?這要從 virtualenv 說起。

上一節結束的時候說,如果忘記了虛擬環境的位置,一切就真的沒發生過了。雖然是句玩笑,不過真的會發生哦~

virtualenv 的一個最大的缺點就是,每次開啟虛擬環境之前要去虛擬環境所在目錄下的 bin 目錄下 source 一下 activate,這就需要我們記住每個虛擬環境所在的目錄。

一種可行的解決方案是,將所有的虛擬環境目錄全都集中起來,比如放到 ~/virtualenvs/,並對不同的虛擬環境使用不同的目錄來管理。virtualenvwrapper 正是這樣做的。並且,它還省去了每次開啟虛擬環境時候的 source 操作,使得虛擬環境更加好用。

安裝

同樣,從安裝開始。

安裝 virtualenvwrapper 也可以使用 pip 的方式。需要加入 sudo 的話請自行加入哦~

pip install virtualenvwrapper

不過,在 Mac OS X El Capitan 上可能會出現安裝報錯的情況,主要問題出在一個叫做 six 的包上。因此安裝的時候,可以採用如下方式。

pip install virtualenvwrapper --ignore-installed six

現在,我們就擁有了一個可以管理虛擬環境的神器。

使用

首先,需要對 virtualenvwrapper 進行配置。它需要指定一個環境變數,叫做 WORKON_HOME,並且需要執行一下它的初始化工具 virtualenvwrapper.sh,這個指令碼在 /usr/local/bin/ 目錄下。WORKON_HOME 就是它將要用來存放各種虛擬環境目錄的目錄,這裡我們可以設定為 ~/.virtualenvs

export WORKON_HOME=`~/.virtualenvs`
source /usr/local/bin/virtualenvwrapper.sh

由於每次都需要執行這兩部操作,我們可以將其寫入終端的配置檔案中。例如,如果使用 bash,則新增到 ~/.bashrc 中;如果使用 zsh,則新增到 ~/.zshrc 中。這樣每次啟動終端的時候都會自動執行,終端其中之後 virtualenvwrapper 就可以用啦。

利用 virtualenvwrapper,我們可以使用下面的命令輕鬆建立一個虛擬環境。

mkvirtualenv spider

之後我們就有了一個叫做 spider 的虛擬環境。它被存放在 $WORKON_HOME/spider 目錄下。

新建虛擬環境之後會自動啟用虛擬環境。如果我們平時想要進入某個虛擬環境,可以用下面的命令。

workon spider

這也就是為什麼環境變數中存放虛擬環境的目錄為啥叫做 WORKON_HOME。順便說一句,workon 後面可是可以支援用 tab 自動補全的喲。

同樣,離開虛擬環境,可以使用。

deactivate

另外,刪除虛擬環境也一樣簡單。

rmvirtualenv spider

結束

到這裡,virtualenvvirtualenvwrapper 的基本使用就介紹完了,需要了解更多用法,可以參考官方文件喲。希望這兩個工具能夠幫助小夥伴們在工作中提高效率喲~~

相關文章