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

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

什麼是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 mkdir nowamagic_venv
2 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就不會讀取系統包,如下:

1 virtualenv nowamagic_venv --no-site-packages
  • 到這裏,virtualenvs 就講完了,很簡單是不是?跟着步驟來,一切都是順理成章的。而且也很強大,Python的開發環境配置起來變得非常簡單。結合後面要講的 virtualenvwrapper,可以自動管理多個環境,很神奇的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章