virtualenv創建獨立的Python環境

關於virtualenv


從字面上可以理解到,virtualenv旨在搭建一個虛擬python環境,根據Python Package Index上的描述,virtualenv是一個工具,可以創建獨立的Python環境,一個專屬於項目的python環境。用virtualenv 來保持一個乾淨的環境非常有用。

virtualenv解決的基本問題是消除了包衝突問題。經常會有這樣的情況,某個工具需要一個包版本,而另一個工具卻需要另一個不同的包版本。這會導致因爲一些人無意地修改全局site-packages目錄,以此希望通過升級包來運行一個不同的工具,從而一個web應用被破壞。

通常的解決辦法是:一個開發者不具有對一個全局sit-packages目錄的寫權限,並且可以使用virtualenv來保持一個獨立的、與系統Python相分離的virtualenv。virtualenv是一個消除之前諸多問題的解決方案,因爲它允許創建新的發送箱,新的發送箱可以徹底與全局sit-packages目錄相隔離。

virtualenv具有以下特點:

1. 能夠在沒有權限的情況下安裝新套件
2. 不同應用可以使用不同的套件版本
3. 套件升級不影響其他應用


安裝virtualenv


virtualenv是一個Python包,可以直接使用easy_install或者pip安裝:

#easy_install virtualenv


創建獨立的Python環境


1. 單一版本的Python使用virtualenv


當主機上只安裝有一個版本的Python時,可以直接使用virtualenv來創建虛擬環境:virtualenv [虛擬環境目錄]

#virtualenv pythonenv

默認情況下,虛擬環境會依賴系統環境中的site packages,就是說系統中已經安裝好的第三方package也會安裝在虛擬環境中,如果不想依賴這些package,那麼可以加上參數 --no-site-packages建立虛擬環境:

#virtualenv --no-site-packages [虛擬環境目錄]


啓動虛擬環境:

#cd pythonenv

#source ./bin/activate

注意此時命令行會多出一個pythonenv,pythonenv爲虛擬環境名稱,接下來所有模塊都只會安裝到該目錄中去。


退出虛擬環境:

#deactivate


2. 多個版本創建virtualenv


當主機上安裝有不同版本的Python,如Python 2.6、Python 2.7或者Python 3.x,它們會共享相同的bin主目錄。

最新版的virtualenv已經支持--python選項,該選項可以直接指定虛擬環境運行的Python環境。如:

#virtualenv --python=/usr/local/python2.7/bin/python2.7 py27ENV

查看:

#ls py27ENV

bin/    lib/

可以看出virtualenv創建了一個相對的bin目錄和lib目錄,bin目錄中是Python解釋器,lib目錄是它自己的本地site-packages目錄。


3. 在虛擬環境安裝Python套件


pip 用來解決項目依賴問題。將項目所有依賴的第三方庫寫在一個requirements.txt 中用pip 批量安裝。一般和virtualenv 配合使用,將所有包安裝在virtualenv 的環境中。

如果沒有啓動虛擬環境,而且沒有使用虛擬環境下的pip的絕對路徑,系統也安裝了pip工具,那麼套件將被安裝在系統環境中,爲了避免發生此事,可以在~/.bashrc文件中加上:

export PIP_REQUIRE_VIRTUALENV=true

或者讓在執行pip的時候讓系統自動開啓虛擬環境:

export PIP_RESPECT_VIRTUALENV=true


4. Virtualenvwrapper


Virtaulenvwrapper是virtualenv的擴展包,用於更方便管理虛擬環境,它可以做:
1. 將所有虛擬環境整合在一個目錄下
2. 管理(新增,刪除,複製)虛擬環境
3. 切換虛擬環境

#easy_install virtualenvwrapper  

此時還不能使用virtualenvwrapper,默認virtualenvwrapper安裝在/usr/local/bin下面,實際上你需要運行virtualenvwrapper.sh文件才行,先別急,打開這個文件看看,裏面有安裝步驟,我們照着操作把環境設置好。

  1. 創建目錄用來存放虛擬環境

    #mkdir $HOME/.virtualenvs
  2. 在~/.bashrc中添加行: export WORKON_HOME=$HOME/.virtualenvs

  3. 在~/.bashrc中添加行:#source /usr/bin/virtualenvwrapper.sh

  4. 運行: #source ~/.bashrc

此時virtualenvwrapper就可以使用了。

列出虛擬環境列表

#workon

也可以使用

#lsvirtualenv

新建虛擬環境

#mkvirtualenv [虛擬環境名稱]       #可使用--python選項指定Python版本

啓動/切換虛擬環境

#workon [虛擬環境名稱]

刪除虛擬環境

#rm virtualenv [虛擬環境名稱]

離開虛擬環境

#deactivate


創建自定義的自啓動虛擬環境


通過virtualenv默認只能創建一個“乾淨”的Python環境,其中只有Python及其標準庫。而爲了在生成基本的Python環境之後,還能夠自動安裝所需要的包,比如開發庫等,就需要通過調virtualenv.create_bootstrap_script(extra_text),來創建一個啓動腳本,類似於virtualenv,但具有額外的特徵可以擴展選項parsing、adjust_options、以及使用after_install鉤子。

virtualenv.create_bootstrap_script支持在生成的定製化腳本的末尾添加一段自己的代碼,而且支持在默認的環境創建完成之後調用自定義的 after_install 方法。

示例:使用virtualenv來創建一個新的虛擬環境並且使用liten包。

創建啓動腳本:

import virtualenv,textwrap

output = virtualenv.create_bootstrap_script(textwrap.dedent("""

import os, subprocess

def after_install(options, home_dir):

     etc = join(home_dir, 'etc')

     if not os.path.exists(etc):

           os.makedirs(etc)

     subprocess.call([join(home_dir, 'bin', 'easy_install'),

              'liten'])

"""))

f = open('liten-bootstrap.py', 'w').write(output)

註解:以上代碼告訴after_install函數在當前稱爲liten-bootstrap.py的工作目錄下寫入一個新文件,然後加入一個自定義的liten模塊的easy_install。代碼創建bootstrap.py文件,通過執行這個腳本,會生成一個liten-bootstrap.py文件,該文件可以發佈給開發者或者終端用戶來運行。                                                                                                                                                        

                                                                                                                                                       ——遊響雲停



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章