在開發 Python
應用程序的時候,每一個項目所須要的python版本和各類包依賴均可能不徹底同樣,咱們固然但願當前運行環境只包含對當前項目有用的包依賴,以保證運行環境的乾淨。virtualenv
就是用來爲一個應用建立一套「隔離」的Python
運行環境。python
首先,咱們用pip
安裝virtualenv
:windows
$ pip3 install virtualenv
而後,假定咱們要開發一個新的項目,須要一套獨立的Python
運行環境,能夠這麼作:app
Mac:~ michael$ mkdir myproject Mac:~ michael$ cd myproject/ Mac:myproject michael$
Python
運行環境,命名爲venv
:Mac:myproject michael$ virtualenv --no-site-packages venv Using base prefix '/usr/local/.../Python.framework/Versions/3.4' New python executable in venv/bin/python3.4Also creating executable in venv/bin/python Installing setuptools, pip, wheel...done.
命令virtualenv
就能夠建立一個獨立的Python
運行環境,咱們還加上了參數--no-site-packages
,這樣,已經安裝到系統Python
環境中的全部第三方包都不會複製過來,這樣,咱們就獲得了一個不帶任何第三方包的「乾淨」的Python
運行環境。spa
注意:這裏若是想本身指定新建立的虛擬空間使用的是哪一個版本的 python
,可使用以下命令指定python
版本:code
virtualenv --python=你想使用的python版本的主目錄 目錄名稱
示例:virtualenv --python=C:\Python\python3\python.exe venv
新建的Python
環境被放到當前目錄下的venv
目錄。有了venv
這個Python
環境,能夠用source
進入該環境:blog
Mac:myproject michael$ source venv/bin/activate
(venv)Mac:myproject michael$
固然了,在windows
上路徑與mac
上有點不一樣,activate.exe
文件在venv/Scripts/
目錄下。ip
注意到命令提示符變了,有個(venv)
前綴,表示當前環境是一個名爲venv
的Python
環境。開發
(venv)Mac:myproject michael$ pip install jinja2 ... Successfully installed jinja2-2.7.3 markupsafe-0.23 (venv)Mac:myproject michael$ python myapp.py ...
在venv
環境下,用pip安裝的包都被安裝到venv
這個環境下,系統Python
環境不受任何影響。 也就是說,venv
環境是專門針對myproject
這個應用建立的。 退出當前的venv
環境,使用deactivate
命令:it
(venv)Mac:myproject michael$ deactivate
Mac:myproject michael$
此時就回到了正常的環境,如今pip
或python
均是在系統Python
環境下執行。pip
徹底能夠針對每一個應用建立獨立的Python
運行環境,這樣就能夠對每一個應用的Python
環境進行隔離。
virtualenv
是如何建立「獨立」的Python
運行環境的呢? 原理很簡單,就是把系統Python
複製一份到virtualenv
的環境, 用命令source venv/bin/activate
進入一個virtualenv
環境時, virtualenv
會修改相關環境變量,讓命令python
和pip
均指向當前的virtualenv
環境。
virtualenv
爲應用提供了隔離的Python
運行環境,解決了不一樣應用間多版本的衝突問題。