不一樣的人喜歡用不一樣的方式創建各自的開發環境,但在幾乎全部的編程社區,總有一個(或一個以上)開發環境讓人更容易接受。 使用不一樣的開發環境雖然沒有什麼錯誤,但有些環境設置更容易進行便利的測試,並作一些重複/模板化的任務,使得在天天的平常工做簡單並易於維護。python
在Python的開發環境的最經常使用的方法是使用 virtualenv 包。 Virtualenv是一個用來建立獨立的Python環境的包。如今,出現了這樣的問題:爲何咱們須要一個獨立的Python環境? 要回答這個問題,請容許我引用virtualenv本身的文檔:shell
virtualenv is a tool to create isolated Python environments.編程
The basic problem being addressed is one of dependencies and versions, and indirectly permissions. Imagine you have an application that needs version 1 of LibFoo, but another application requires version 2. How can you use both these applications? If you install everything into /usr/lib/python2.7/site-packages (or whatever your platform’s standard location is), it’s easy to end up in a situation where you unintentionally upgrade an application that shouldn’t be upgraded.json
Or more generally, what if you want to install an application and leave it be? If an application works, any change in its libraries or the versions of those libraries can break the application.app
Also, what if you can’t install packages into the global site-packages directory? For instance, on a shared host.python2.7
In all these cases, virtualenv can help you. It creates an environment that has its own installation directories, that doesn’t share libraries with other virtualenv environments (and optionally doesn’t access the globally installed libraries either).測試
咱們須要處理的基本問題是包的依賴、版本和間接權限問題。想象一下,你有兩個應用,一個應用須要libfoo的版本1,而另外一應用須要版本2。如何才能同時使用這些應用程序?若是您安裝到的/usr/lib/python2.7/site-packages(或任何平臺的標準位置)的一切,在這種狀況下,您可能會不當心升級不該該升級的應用程序。ui
簡單地說,你能夠爲每一個項目創建不一樣的/獨立的Python環境,你將爲每一個項目安裝全部須要的軟件包到它們各自獨立的環境中。.net
安裝 virtualenv 很簡單:orm
pip install virtualenv
virtualenv安裝完畢後,能夠經過運行下面的命令來爲你的項目建立獨立的python環境:
mkdir nowamagic_venv virtualenv --distribute nowamagic_venv
OK,成功。上面發生了什麼?你建立了文件夾 nowamagic_venv 來存儲你的新的獨立Python環境。 這個文件夾位於 /root 下面。
咱們再來看看輸出:
New python executable in nowamagic_venv/bin/python2.7 Also creating executable in nowamagic_venv/bin/python Installing Setuptools......done. Installing Pip...........done.
--distribute 選項使virtualenv使用新的基於發行版的包管理系統而不是 setuptools 得到的包。 你如今須要知道的就是 --distribute 選項會自動在新的虛擬環境中安裝 pip ,這樣就不須要手動安裝了。 當你成爲一個更有經驗的Python開發者,你就會明白其中細節。
經過下面的命令激活這個virtualenv:
[root@nowamagic ~]# cd nowamagic_venv [root@nowamagic nowamagic_venv]# source bin/activate (nowamagic_venv)[root@nowamagic nowamagic_venv]#
運行下面的命令能夠更好地理解二者的差別,若是已經進入virtualenv請先離開。
deactivate #離開
首先讓咱們看看若是調用python/pip命令它會調用那一個。
[root@nowamagic ~]# which python /usr/bin/python
[root@nowamagic ~]# which pip /usr/local/bin/pip
再來一次!此次打開virtualenv,而後看看有什麼不一樣。個人機子上顯示以下:
[root@nowamagic ~]# which python /root/nowamagic_venv/bin/python
[root@nowamagic ~]# which pip /root/nowamagic_venv/bin/pip
virtualenv拷貝了Python可執行文件的副本,並建立一些有用的腳本和安裝了項目須要的軟件包,你能夠在項目的整個生命週期中安裝/升級/刪除這些包。 它也修改了一些搜索路徑,例如PYTHONPATH,以確保:
還有一點比較重要,在默認狀況下,全部安裝在系統範圍內的包對於virtualenv是可見的。 這意味着若是你將simplejson安裝在您的系統Python目錄中,它會自動提供給全部的virtualenvs使用。 這種行爲能夠被更改,在建立virtualenv時增長 --no-site-packages 選項的virtualenv就不會讀取系統包,以下:
virtualenv nowamagic_venv --no-site-packages