Python開發必備利器之Virtual Environment

Python開發必備利器之Virtual Environment

使用Python進行開發時,我們需要在系統中安裝Python以及所需要的第三方依賴包,依賴包通常都會被pip安裝到Python的site-packages目錄。如果經常使用Python進行開發,可能會遇到不同項目依賴於同一第三方包的不同版本。怎樣才能高效的維護開發環境和管理第三方包呢?畢竟,我們希望項目有一個可以完全控制的隔離運行環境,在這個環境裡我們可以控制安裝哪些第三方依賴包,以及這些依賴包的什麼版本應該被安裝。同時,我們可以在這個隔離環境裡升級任意的第三方依賴包,並且不會影響到其它項目。

Virtual Environment的使用

Python提供了一個非常方便的工具來維護運行環境和管理依賴包,這個工具就是Virtual Environment。它能夠幫我們為每一個項目構建一個隔離的運行環境。Virtual Environment的安裝和使用也非常簡單,我們只需要運行下面命令就可以使用pip安裝Virtual Environment。

pip install virtualenv

完成安裝以後,開始一個Python項目時我們可以使用virtualenv命令為這個項目創建一個隔離的環境,這裡假如我們的項目名為Spider。

mkdir Spidercd Spidervirtualenv Spider -p python3

“-p python3”指定了我們的運行環境使用的是Python3。如果我們再加上了參數“--no-site-packages”,已經安裝到系統Python環境中的所有第三方包都不會複製到我們創建的環境。一個不帶任何第三方包的Python運行環境被創建起來。

接下來,我們可以激活Virtual Environment,Python程序就運行在這個隔離的Python環境裡了。在Windows和類Linux下激活命令稍微有一點不同。

Linux系統:

source Spider/bin/activate

Windows系統:

.\Spider\Scripts\activate

如果沒有什麼意外,我們可以看見(Spider)出現在我們的命令行前面。這表明我們正工作在Spider的虛擬環境裡,所有依賴和其它項目是隔離的。

我們可以通過pip安裝指定的第三方包到當前環境。這裡假設我們要安裝我們 裡用到過的BeautifulSoup 4.3.2到當前Spider環境中。

pip install beautifulsoup4==4.3.2

我們可以通過下面命令列出所有當前環境安裝的第三方包。

pip freeze

我們也可以把標準輸出的第三方包保存到文件requirements.txt中。

pip freeze > requirements.txt

我們可以通過下面命令退出當前虛擬環境。

deactivate

當我們切換到一臺新的開發機或者是項目的其它開發者可以創建新的運行環境,並只需要簡單的運行下面命令就可以得到一個和前面有完全一樣安裝包的虛擬環境。

pip install -r requirements.txt

最後,在這個虛擬環境裡我們也可以獨立的升級軟件包。

pip install --upgrade beautifulsoup4

我們可以看到,即使是在同一臺機器上也只有這一個虛擬環境裡的beautifulsoup4被升級了,其它環境裡依然是4.3.2。

Virtual Environment的原理

當我們輸入Python時,操作系統之所以能夠找到並運行我想我們安裝的Python,是因為環境變量存儲了一個目錄列表。操作系統從這個目錄下尋找Python。

當我們創建一個新虛擬環境的時候,需要的Python解釋器和相關的第三方包會被拷貝到虛擬環境所在的目錄。即使是系統的Python解釋器或者是第三方包被升級了,虛擬環境的版本依然會保存不變。

當我們激活一個虛擬環境裡時,虛擬環境所作的就是替換環境變量,保證找到的Python解釋器和第三方包是安裝在虛擬環境裡的。

當我們在激活的虛擬環境裡使用pip安裝或升級第三方包時,所有的改動都是被保存到當前虛擬環境中python的site-packages目錄。

瞭解了虛擬環境的運行原理後,如果我們遇到任何不是通過pip安裝的python包(如PyQt4),我們也可以先安裝到系統,然後在拷貝到虛擬環境中對應的目錄。這樣可以使這個包也和系統中的隔離開來。

最後

通常,每當我們開始一個新的項目時,哪怕這個項目只是我們的一些測試項目,我們都應該創建一個新的Virtual Environment,在這個環境中運行項目。這樣可以保證各個項目有一個隔離的運行環境。

往期文章:


分享到:


相關文章: