優雅的使用python之環境管理
情景1:不一樣python版本的管理
同一電腦上的多個python版本以前的管理,爲了突出問題的廣泛存在,下面是有人在segmentfault上提的問題。
摘自:http://segmentfault.com/q/1010000000162043
情景2:同一python版本中同一庫的不一樣版本管理
例如在python2.7下應用A是基於Django1.6,應用B是基於Django1.7的,這種狀況怎麼管理。
爲解決以上問題,下面隆重介紹下virtualenv、virtualenvwrapper。
摘自virtualenv官網的https://virtualenv.pypa.io/en/latest/virtualenv.html一段介紹:
「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 is a set of shell functions defined in Bourne shell compatible syntax。因此在window平臺下,是否是使用不了的,可是對應有一個virtualenvwrapper-win版本(https://pypi.python.org/pypi/virtualenvwrapper-win)。
virtualenvwrapper-win將安裝在python根目錄下面,如D:\Python34。
# using pip
pip install virtualenvwrapper-win
# using easy_install
easy_install virtualenvwrapper-win
# from source
git clone git://github.com/davidmarble/virtualenvwrapper-win.git
cd virtualenvwrapper-win
python setup.py install
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
Using base prefix 'D:\\Python34'
New python executable in vn_py3.4_app3\Scripts\python.exe
Installing setuptools, pip...done.
(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軟件包管理再下一篇介紹。
相關鏈接:
https://virtualenv.pypa.io/en/latest/index.html
http://virtualenvwrapper.readthedocs.org/en/latest/index.html