优雅的使用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