天天看點

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

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

Eclipse的Pydev是支援virtualenv,virtualenv其實就是一個獨立的Python解釋器及相關的Python Package,你隻要選中某個工程,然後配置一下該工程的Python解釋器就可以了。

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

不同的人喜歡用不同的方式建立各自的開發環境,但在幾乎所有的程式設計社群,總有一個(或一個以上)開發環境讓人更容易接受。 使用不同的開發環境雖然沒有什麼錯誤,但有些環境設定更容易進行便利的測試,并做一些重複/模闆化的任務,使得在每天的日常工作簡單并易于維護。

什麼是virtualenv?

在Python的開發環境的最常用的方法是使用 virtualenv 包。 Virtualenv是一個用來建立獨立的Python環境的包。現在,出現了這樣的問題:為什麼我們需要一個獨立的Python環境? 要回答這個問題,請允許我引用virtualenv自己的文檔:

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.

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.

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

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(或任何平台的标準位置)的一切,在這種情況下,您可能會不小心更新不應該更新的應用程式。

簡單地說,你可以為每個項目建立不同的/獨立的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開發者,你就會明白其中細節。

用virtualenv建立多個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

繼續閱讀