python虛擬環境virtualenv

一、使用虛擬環境的原因

在使用python開發的過程中,工程一多,難免會碰到不同的工程依賴不同版本的庫的問題;亦或者是在開發過程中不想讓物理環境里充斥各種各樣的庫,引發未來的依賴災難。此時,我們需要對于不同的工程使用不同的虛擬環境來保持開發環境以及系統環境的清潔。

virtualenv,一個可以幫助我們管理不同 Python 環境的工具。virtualenv 可以在系統中建立多個不同并且相互不干擾的虛擬環境。另外,值得一提的是,在 virtualenv 的虛擬環境中使用 pip 安裝依賴還可以繞過某些系統的權限設置,因為不需要向系統目錄寫入數據。

virtualenv通過創建獨立Python開發及運行環境的工具, 來解決依賴、版本以及間接權限問題。
1. 解決庫之間的版本依賴,比如同一系統上不同應用依賴同一個庫的不同版本。
2. 解決權限限制,比如沒有 root 權限。
3. 套件升級不影響其他應用

二、安裝virtualenv

virtualenv實際上是一個python包,可以使用pip安裝

  pip  install virtualenv

三、使用virtualenv

1、為工程創建一個虛擬環境

virtualenv [OPTIONS] DEST_DIR  

例:

$ cd  project1
$ virtualenv   venv

virtualenv venv 將會在當前的目錄中創建一個文件夾,實際上就是將Python環境克隆了一份,包含Python解釋器、setuptools、pip、wheel,以及 python標準庫

options:

(1) -p PYTHON, --python=PYTHON 可以指定一個Python解釋器

$ virtualenv -p /usr/bin/python2.7.5  venv

(2)是否集成global python的庫

virtualenv --system-site-packages  venv

會繼承全局python安裝的所有庫(/usr/lib/python2.7/site-packages下的所有庫)

virtualenv --no-site-packages venv

已經安裝到系統Python環境中的所有第三方包都不會復制過來,得到一個不帶任何第三方包的“干凈”的Python運行環境,這在 virtualenv 1.7及之后是默認行為。

(3) --always-copy 復制庫文件,而不是建立python庫文件的syslink

(4) --no-setuptools
在創建的虛擬環境中不安裝setuptools

(5) --no-pip
在虛擬環境中不安裝pip

(6) --no-wheel
在虛擬環境中不安裝wheel

(7)--prompt=PROMPT
定義隔離環境的命令行前綴。

(8)--extra-search-dir=DIR
創建新的虛擬環境時,virtualenv會安裝setuptools,distribute或是pip包管理器。一般情況下, 它們都會從 PyPI 中尋找并安裝最新的包。但在一些特定情況下,我們并不希望如此。例如, 在部署virtualenv時既不想從網上下載,也不想從PyPI中獲取包。
作為替代方案,可以讓setuptools,distribute或是pip搜尋文件系統,讓virtualenv使用本地發行包而不是從網上下載。 只要傳入一個或多個 --extra-search-dir 參數就能使用該特性

$ virtualenv --extra-search-dir=/path/to/distributions ENV

/path/to/distributions 路徑指向某個包含setuptools/distribute/pip發行包的目錄。 Setuptools發行包必須是 .egg 文件,distribute和pip發行包則是 .tar.gz 原代碼壓縮包。
如果本地路徑沒有找到相應的發布包,virtualenv還是會從網上下載。要想確保不會從網上下載任何發行包,就使用 --never-download 參數,如下:

$ virtualenv --extra-search-dir=/path/to/distributions --never-download ENV

這樣,virtualenv不會從網上下載任何發行包。而只搜索本地發行包,如果沒有找到要安裝的包,就返回狀態碼1。

virtualenv會按照如下順序搜索發行包位置:

  • 當前目錄
  • virtualenv.py所在目錄
  • virtualenv.py所在目錄下的 virtualenv_support 目錄
  • 如果實際運行的腳本名不是virtualenv.py (換句話說,就是你的自定義啟動腳本 ),會搜索實際安裝的virtualenv.py所在目錄下virtualenv_support 目錄。

(9)-h, --help
顯示幫助信息。

(10)-v, --verbose
顯示詳細信息。

(11)-q, --quiet
不顯示詳細信息。

(12)--clear
清空非root用戶的安裝,并重新開始創建隔離環境。
例:之前已經創建了一個虛擬環境venv,并在虛擬環境中另安裝了一些庫,可用virtualenv --clear venv來清除非root用戶安裝的庫文件。

(13)--unzip-setuptools
安裝時解壓Setuptools或Distribute

(14)--relocatable 不建議使用,不支持跨平臺,可能出現一些錯誤,安裝任何包之后,都要再次重定位環境.
重定位某個已存在的隔離環境,使用該option將修正腳本并令所有.pth文件使用相對路徑。
某些特殊需求下,可能沒有網絡, 我們期望直接打包一個ENV, 可以解壓后直接使用, 這時候可以使用virtualenv -relocatable指令將ENV修改為可更改位置的ENV

(15)--distribute
使用distribute代替setuptools。

附注:

  • 創建虛擬環境venv后, 在這個目錄下面會有三個目錄被建立: bin, lib, include。

  • bin 目錄中包含一些在這個虛擬環境中可用的命令,以及激活虛擬環境的腳本 activate, bin/python是在當前環境是使用的python解釋器

  • lib/include 中是一些依賴庫文件,所有安裝的python庫都會放在這個目錄中的lib/pythonx.x/site-packages/目錄下。

  • 可以通過環境變量配置virtualenv。

    命令行的每個參數都以 VIRTUALENV_<UPPER_NAME> 的格式對應一個環境變量。 轉換變量名過程中,除了將命令行參數大寫外,還要把 ('-') 替換為 ('_')

    例:

a. VIRTUALENV_PYTHON
    例:VIRTUALENV_PYTHON=/opt/python-3.3/bin/python
    設置環境變量后,以后每次建立虛擬環境時,命令virtualenv ENV 即指定了Python為環境變量中指定的python解釋器
b. VIRTUALENV_EXTRA_SEARCH_DIR
例:
$ export VIRTUALENV_EXTRA_SEARCH_DIR="/path/to/dists /path/to/other/dists"
$ virtualenv ENV
相當于
$ virtualenv --extra-search-dir=/path/to/dists --extra-search-dir=/path/to/other/dists ENV
c. VIRTUAL_ENV_DISABLE_PROMPT
該環境變量被設置為任意非空字符串時,激活虛擬環境后,左側都沒有虛擬環境的提示符。
  • 可以通過配置文件配置virtualenv
    在linux上配置文件目錄為$HOME/.virtualenv/virtualenv.ini
a.[virtualenv]
python = /opt/python-3.3/bin/python
作用相當于設置環境變量VIRTUALENV_PYTHON
    
b. [virtualenv]
extra-search-dir =
/path/to/dists
   /path/to/other/dists
    作用相當于設置環境變量 `VIRTUALENV_EXTRA_SEARCH_DIR

2、使用虛擬環境,需要先激活虛擬環境。

$ source venv/bin/activate

該操作會將當前 $PATH 指向隔離環境下的 bin/ 目錄。之所以要用source是因為它要改變當前shell環境。
激活后,在系統提示符左側會顯示虛擬環境的名字,例如(venv)
從現在起,用pip安裝的python包會在虛擬環境中,安裝在 venv/lib/python2.7/site-packages中,與全局安裝的python隔絕開,也與其他python虛擬環境隔絕開,
只在此python虛擬環境中可用。

3、如果暫時不用python虛擬環境,可以關閉

$ deactivate

此時返回到系統環境,此時使用python則調用系統python解釋器,需要用到的庫也是系統python安裝的庫

4、要刪除一個虛擬環境,只需刪除它的文件夾

$ rm -rf venv

注:

(1)如果沒有啟動虛擬環境,系統也安裝了pip工具,那么套件將被安裝在系統環境中,為了避免發生此事,可以在~/.bashrc文件中加上:

$ export PIP_REQUIRE_VIRTUALENV=true

此時只能在虛擬環境中使用pip,在非虛擬環境中使用pip會報錯。

(2)從1.5版開始,virtualenv開始支持pypy。

下一篇:python虛擬環境進階 virtualenvwrapper
http://www.lxweimin.com/p/bfc4be124e37

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容