设为首页 收藏本站
查看: 1224|回复: 0

[经验分享] 优雅的使用python之环境管理

[复制链接]

尚未签到

发表于 2015-4-21 13:01:00 | 显示全部楼层 |阅读模式
优雅的使用python之环境管理


缘起
情景1:不同python版本的管理
同一电脑上的多个python版本之前的管理,为了突出问题的普遍存在,下面是有人在segmentfault上提的问题。
DSC0000.png

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

情景2:同一python版本中同一库的不同版本管理
例如在python2.7下应用A是基于Django1.6,应用B是基于Django1.7的,这种情况怎么管理。
为解决以上问题,下面隆重介绍下virtualenv、virtualenvwrapper。

virtualenv
摘自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              .
2014/11/26  15:38              ..
2014/05/16  15:34              Include
2014/11/26  15:38              Lib
2014/11/26  15:38              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
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 pippip install virtualenvwrapper-win # using easy_installeasy_install virtualenvwrapper-win # from sourcegit clone git://github.com/davidmarble/virtualenvwrapper-win.gitcd virtualenvwrapper-winpython 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
https://pypi.python.org/pypi/virtualenvwrapper-win

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59260-1-1.html 上篇帖子: 用PDB库调试Python程序 下篇帖子: Python学习笔记 === python自省
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表