用virtualenv創建多個Python獨立開發環境(轉)

add by zhj: 在virtualenv環境下,安裝第三方包時,不要用sudo pip install xxx,要直接用pip install xxx,若是用sudo時,那會安裝在原來的系統Python目錄下python

Eclipse的Pydev是支持virtualenv,virtualenv其實就是一個獨立的Python解釋器及相關的Python Package,你只要選中某個工程,而後配置一下該工程的Python解釋器就能夠了。編程

原文:http://www.nowamagic.net/academy/detail/1330228json

不一樣的人喜歡用不一樣的方式創建各自的開發環境,但在幾乎全部的編程社區,總有一個(或一個以上)開發環境讓人更容易接受。 使用不一樣的開發環境雖然沒有什麼錯誤,但有些環境設置更容易進行便利的測試,並作一些重複/模板化的任務,使得在天天的平常工做簡單並易於維護。ubuntu

什麼是virtualenv?

在Python的開發環境的最經常使用的方法是使用 virtualenv 包。 Virtualenv是一個用來建立獨立的Python環境的包。如今,出現了這樣的問題:爲何咱們須要一個獨立的Python環境? 要回答這個問題,請容許我引用virtualenv本身的文檔:app

virtualenv is a tool to create isolated Python environments.python2.7

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.測試

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.ui

Also, what if you can’t install packages into the global site-packages directory? For instance, on a shared host..net

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).code

咱們須要處理的基本問題是包的依賴、版本和間接權限問題。想象一下,你有兩個應用,一個應用須要libfoo的版本1,而另外一應用須要版本2。如何才能同時使用這些應用程序?若是您安裝到的/usr/lib/python2.7/site-packages(或任何平臺的標準位置)的一切,在這種狀況下,您可能會不當心升級不該該升級的應用程序。

簡單地說,你能夠爲每一個項目創建不一樣的/獨立的Python環境,你將爲每一個項目安裝全部須要的軟件包到它們各自獨立的環境中。

安裝與使用virtualenv

安裝 virtualenv 很簡單:

1 pip install virtualenv

virtualenv安裝完畢後,能夠經過運行下面的命令來爲你的項目建立獨立的python環境:

 
1 virtualenv --distribute nowamagic_venv

OK,成功。上面發生了什麼?他建立了文件夾 nowamagic_venv 來存儲你的新的獨立Python環境。 這個文件夾位於 /root 下面。

咱們再來看看輸出:

1 New python executable in nowamagic_venv/bin/python2.7
2 Also creating executable in nowamagic_venv/bin/python
3 Installing Setuptools......done.
4 Installing Pip...........done.

--distribute 選項使virtualenv使用新的基於發行版的包管理系統而不是 setuptools 得到的包。 你如今須要知道的就是 --distribute 選項會自動在新的虛擬環境中安裝 pip ,這樣就不須要手動安裝了。 當你成爲一個更有經驗的Python開發者,你就會明白其中細節。

  • activate:這個virtualenv的激活文件
  • pip:這個virtualenv的獨立pip
  • python:python解釋器的一個副本
  • lib/python2.7:全部的新包會被存在這

試驗一下

經過下面的命令激活這個virtualenv:

1 [root@nowamagic ~]# cd nowamagic_venv
2 [root@nowamagic nowamagic_venv]# source bin/activate
3 (nowamagic_venv)[root@nowamagic nowamagic_venv]#

運行下面的命令能夠更好地理解二者的差別,若是已經進入virtualenv請先離開。

1 deactivate  #離開

首先讓咱們看看若是調用python/pip命令它會調用那一個。

1 [root@nowamagic ~]# which python
2 /usr/bin/python
1 [root@nowamagic ~]# which pip
2 /usr/local/bin/pip

再來一次!此次打開virtualenv,而後看看有什麼不一樣。個人機子上顯示以下:

1 [root@nowamagic ~]# which python
2 /root/nowamagic_venv/bin/python
1 [root@nowamagic ~]# which pip
2 /root/nowamagic_venv/bin/pip

virtualenv拷貝了Python可執行文件的副本,並建立一些有用的腳本和安裝了項目須要的軟件包,你能夠在項目的整個生命週期中安裝/升級/刪除這些包。 它也修改了一些搜索路徑,例如PYTHONPATH,以確保:

  • 當安裝包時,它們被安裝在當前活動的virtualenv裏,而不是系統範圍內的Python路徑。
  • 當import代碼時,virtualenv將優先採起本環境中安裝的包,而不是系統Python目錄中安裝的包。

還有一點比較重要,在默認狀況下,全部安裝在系統範圍內的包對於virtualenv是可見的。 這意味着若是你將simplejson安裝在您的系統Python目錄中,它會自動提供給全部的virtualenvs使用。 這種行爲能夠被更改,在建立virtualenv時增長 --no-site-packages 選項的virtualenv就不會讀取系統包,以下(這裏應該是說的site-packages目錄下的包,對於ubuntu12.04,這個目錄是空的,因此virtualenv始終不會使用系統Python目錄下的第三方包。注:Ubuntu12.04的第三方包入在dist-packages目錄下):

1 virtualenv nowamagic_venv --no-site-packages
相關文章
相關標籤/搜索