一篇文章完全理解virtualenv

青衫無名發表於2018-03-16

1.virtualenv介紹

在python開發中,我們可能會遇到一種情況,就是當前的專案依賴的是某一個版本,但是另一個專案依賴的是另一個版本,這樣就會造成依賴衝突,而virtualenv就是解決這種情況的,virtualenv通過建立一個虛擬化的python執行環境,將我們所需的依賴安裝進去的,不同專案之間相互不干擾,如下所示。 

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

2.安裝virtualenv

安裝virtualenv比較簡單,無論是在linux系統上還是windows上都可以通過pip來進行安裝,如下:

pip install virtualenv

如果安裝不成功也可以下載virtualenv原始碼package,通過執行setup.py來安裝virtualenv。同時因為python2和python3的不同,因此也有了兩種pip和pip3兩種python包安裝工具,而兩種工具安裝的virtualenv也是不相同的,py2安裝的virtualenv虛擬化出來的python執行環境是python2的,py3安裝的virtualenv預設虛擬化環境則是python3的。

3.virtualenv執行使用

3.1 建立虛擬化環境

使用pycharm來作為本示例的編輯器,選擇python2.7工作環境,新建工程virtualenvDemo,在控制檯中輸入命令:

virtualenv venv

這時候便會在當前的專案中建立venv資料夾,為當前專案的虛擬python執行環境,如下:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

我本機此時預設的python環境為python2.7,那麼此時建立的虛擬環境就是以python2.7建立的虛擬化環境,如果需要選擇一個python直譯器來建立虛擬化環境,命令則為:

virtualenv -p /usr/bin/python2.7 venv

此時還需將當前工程的interpreter改為當前的虛擬環境,要不然會不起作用,這個不再詳述。

3.2 啟用

啟用虛擬化環境的命令為:

source venv/bin/activate

啟用後,在控制檯會有一個帶有(venv)的標誌,如下:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

3.3安裝依賴

在以上完成之後就可以通過命令pip install 來安裝python包了,這裡安裝python包就不需要root許可權了,直接就可以安裝十分方便。在venv的環境中,使用pip安裝的包都不會再是全域性性的包,只會在當前的虛擬環境中起作用,避免了汙染系統環境。

3.4 退出當前系統環境

在控制檯中輸入命令deactivate後,就會推出當前的venv虛擬化環境。

4.virtualenv其他命令

virtualenv各種其他命令如下:

``` 
用法:

$ virtualenv [OPTIONS] DEST_DIR 
選項: 
--version 
顯示當前版本號。 
-h, --help 
顯示幫助資訊。 
-v, --verbose 
顯示詳細資訊。 
-q, --quiet 
不顯示詳細資訊。 
-p PYTHON_EXE, --python=PYTHON_EXE 
指定所用的python解析器的版本,比如 --python=python2.5 就使用2.5版本的解析器建立新的隔離環境。 預設使用的是當前系統安裝(/usr/bin/python)的python解析器 
--clear 
清空非root使用者的安裝,並重頭開始建立隔離環境。 
--no-site-packages 
令隔離環境不能訪問系統全域性的site-packages目錄。 
--system-site-packages 
令隔離環境可以訪問系統全域性的site-packages目錄。 
--unzip-setuptools 
安裝時解壓Setuptools或Distribute 
--relocatable 
重定位某個已存在的隔離環境。使用該選項將修正指令碼並令所有.pth檔案使用相當路徑。 
--distribute 
使用Distribute代替Setuptools,也可設定環境變數VIRTUALENV_DISTRIBUTE達到同樣效要。 
--extra-search-dir=SEARCH_DIRS 
用於查詢setuptools/distribute/pip釋出包的目錄。可以新增任意數量的–extra-search-dir路徑。 
--never-download 
禁止從網上下載任何資料。此時,如果在本地搜尋釋出包失敗,virtualenv就會報錯。 
--prompt==PROMPT 
定義隔離環境的命令列字首。 
```

5.綜上

8481c8f592b7f349aa84a1de5c171db681516edfvirtualenv就是一個搭建虛擬化的python環境,便於不同的專案在同一臺機器上開發執行。

8481c8f592b7f349aa84a1de5c171db681516edfvirtualenv更多的還是適用於本地開發不同的專案,但是在生產環境中還是使用docker給不同的專案建立不同的容器,各自分開執行為好,不宜放在一個單獨的物理機中執行。


原文釋出時間為:2017-03-10

本文作者:夏軒

本文來自雲棲社群合作伙伴“Python中文社群”,瞭解相關資訊可以關注“Python中文社群”微信公眾號


相關文章