關於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文件才行,先別急,打開這個文件看看,裏面有安裝步驟,我們照着操作把環境設置好。
創建目錄用來存放虛擬環境
#mkdir $HOME/.virtualenvs
在~/.bashrc中添加行: export WORKON_HOME=$HOME/.virtualenvs
在~/.bashrc中添加行:#source /usr/bin/virtualenvwrapper.sh
運行: #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文件,該文件可以發佈給開發者或者終端用戶來運行。
——遊響雲停