天天看點

優雅的使用python之環境管理緣起virtualenvvirtualenvwrapper總結

優雅的使用python之環境管理

情景1:不同python版本的管理

同一電腦上的多個python版本之前的管理,為了突出問題的普遍存在,下面是有人在segmentfault上提的問題。

優雅的使用python之環境管理緣起virtualenvvirtualenvwrapper總結

摘自:http://segmentfault.com/q/1010000000162043

情景2:同一python版本中同一庫的不同版本管理

例如在python2.7下應用a是基于django1.6,應用b是基于django1.7的,這種情況怎麼管理。

為解決以上問題,下面隆重介紹下virtualenv、virtualenvwrapper。

“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.”

大意就是virtualenv用于在一台機器上建立多個獨立的python運作環境,可以解決:

l  隔離項目之間的第三方包依賴

l  在沒有權限的情況下安裝新的python軟體包

除此之外,還有一個額外的好處:部署應用時,把開發環境的虛拟環境打包到生産環境即可。

方式一:通過pip

[sudo] pip install virtualenv

方式二:源碼方式

下載下傳、解壓

cd virtualenv-x.x

[sudo] python setup.py install

方式n…

virtualenv [虛拟環境名稱] /virtualevn.exe [虛拟環境名稱]

我的環境是windows python3.4,這樣建立虛拟環境:

e:\>d:\python34\scripts\virtualenv.exe env_py3.4

using base prefix 'd:\\python34'

new python executable in env_py3.4\scripts\python.exe

installing setuptools, pip...done.

建立虛拟環境env_py3.4之後,對應目錄下面有以下檔案夾:

e:\env_py3.4 的目錄

2014/11/26  15:38    <dir>          .

2014/11/26  15:38    <dir>          ..

2014/05/16  15:34    <dir>          include

2014/11/26  15:38    <dir>          lib

2014/11/26  15:38    <dir>          scripts

其中lib/site-packages包含了,從系統安裝的python3.4下面的庫。預設情況下,虛拟環境會依賴系統環境中的site packages,就是說系統中已經安裝好的第三方package也會安裝在虛拟環境中,如果不想依賴這些package,那麼可以加上參數 --no-site-packages建立虛拟環境

virtualenv --no-site-packages [虛拟環境名稱]

source bin/activate或者 scripts\activate.bat

啟用虛拟環境之後,指令行提示符将以虛拟環境名為字首,如(env_py3.4) e:\env_py3.4>。也可以通過python列印出os.sys.path進行驗證,如在我的env_py3.4虛拟環境啟用之後,系統path路徑如下所示:

e:\env_py3.4>scripts\activate

(env_py3.4) e:\env_py3.4>python

python 3.4.0 (v3.4.0:04f714765c13, mar 16 2014, 19:24:06) [msc v.1600 32 bit (in

tel)] on win32

type "help", "copyright", "credits" or "license" for more information.

>>> import os

>>> print(os.sys.path)

['', 'e:\\env_py3.4\\scripts\\python34.zip', 'e:\\env_py3.4\\dlls', 'e:\\env_py3

.4\\lib', 'e:\\env_py3.4\\scripts', 'd:\\python34\\lib', 'd:\\python34\\dlls', '

e:\\env_py3.4', 'e:\\env_py3.4\\lib\\site-packages']

從os.sys.path中可以看出,這個環境下執行python相關的操作都是限定在虛拟環境中。

bin/deactivate 或者 scripts\deactivate

如退出env_py3.4虛拟環境,指令行提示符字首也相應改變了。

(env_py3.4) e:\env_py3.4>scripts\deactivate

e:\env_py3.4>

在虛拟環境中安裝新的python軟體包,跟正常的python一樣,并且虛拟環境中已經附帶pip、easy_install等工具,可以非常友善的使用。

virtualenvwrapper 是一個virtualenv 的extension,可使虛拟環境的管理變得更容易。詳細來說,virtualenvwrapper 提供下述功能:

l  将所有的虛拟環境整合在一個目錄下。

l  管理(新增、移除、複制)所有的虛拟環境。

l  可以使用一個指令切換虛拟環境。

l  tab 補全虛拟環境的名字。

l  每個操作都提供允許使用者自定的hooks。

l  可撰寫容易分享的extension plugin 系統。

通過pip或者easy_install安裝virtualenvwrapper

pip install virtualenvwrapper

預設virtualenvwrapper安裝在/usr/local/bin下面,實際上你需要運作virtualenvwrapper.sh檔案才行。

virtualenvwrapper-win将安裝在python根目錄下面,如d:\python34。

virtualenvwrapper-win和virtualenvwrapper的使用方式完全一樣:

l  列出虛拟環境清單:workon 或者lsvirtualenv

l  建立虛拟環境:mkvirtualenv [虛拟環境名稱]

l  啟動/切換虛拟環境:workon [虛拟環境名稱]

l  删除虛拟環境:rmvirtualenv [虛拟環境名稱]

l  離開虛拟環境:deactivate.

例如,我建立了3個虛拟環境

       …….

(vn_py3.4_app2) d:\python34>mkvirtualenv.bat vn_py3.4_app3

new python executable in vn_py3.4_app3\scripts\python.exe

(vn_py3.4_app3) d:\python34>workon.bat

pass a name to activate one of the following virtualenvs:

==========================================================

vn_py3.4_app1

vn_py3.4_app2

vn_py3.4_app3

預設建立的虛拟環境路徑為:%userprofile%\envs,即c:\users\使用者名\envs。

切換虛拟環境:

(vn_py3.4_app3) d:\python34>workon.bat vn_py3.4_app1

(vn_py3.4_app1) d:\python34>workon.bat vn_py3.4_app2

(vn_py3.4_app2) d:\python34>

注意:如果window下面碰到d:\python34\scripts>mkvirtualenv.bat f:\evn_py3.4_app1

python.exe: can't open file 'd:\python34\scripts\virtualenv-script.py': [errno 2

] no such file or directory,修改mkvirtualenv.bat中的python.exe "%pyhome%\scripts\virtualenv-script.py" %args% ==》python.exe "%pyhome%\scripts\virtualenv.exe" %args%即可。

基于virtualenv + virtualenvwrapper可以很好的完成環境隔離,保證對每個應用的環境是幹淨的。而且對一個幹淨的環境可以通過:

pip freeze > requirements.txt将包依賴資訊儲存在requirements.txt檔案

pip install -r requirements.txt會自動從網上下載下傳并安裝所有包

友善應用部署分發,關于pip軟體包管理再下一篇介紹。