服务器上安装比较多的服务时,经常会遇到需要不同python版本的问题。比如我这里一台测试服务器上部署N套Django应用,然后有的依赖Python2.6,有的必须在Python2.7上运行。
最开始为了安装简单,用了一个scl的yum源,安装了python2.7.5,但是urllib2的urlopen不支持context参数,这个从2.7.9才开始支持,于是无奈的又开始了折腾之路。
这次选择了virtualenv来管理多套python环境。
好吧,下面介绍安装步骤,假设系统里已经安装了python2.7.11.
1.pip install virtualenv
这个没什么难度,安装好就行了。然后选个目录,作为virtualenv的工作目录。注意,这里有个大坑:很多教程里都把这个目录选在了/root下,如果你一直用root账户工作是没有问题的,一旦切换账户就会发现import出错等一堆问题。所以,这里最好不要选/root目录。
比如我们选了/deploy/.virtualenvs目录,在这个目录下执行virtualenv --python=python2.7 python27,然后ls -l,就可以看到用来存放python2.7环境的python27目录。然后我们source python27/bin/activate,就看到提示符变成了“(python27) XXXX”,这时候就进入python2.7环境了。
在这个提示符下进行的pip安装等,全都是在虚拟环境上进行的,不影响原有的python环境。
退出也很简单,deactivate就可以了。
2.pip install virtualenvwrapper
这个wrapper是个锦上添花的工具,主要就是方便管理virtualenv。安装的时候注意不要在虚拟环境执行pip安装。
安装完之后,编辑.bash_profile,增加如下内容:
#virtaulenv
export WORKON_HOME=/deploy/.virtualenvs
source /usr/bin/virtualenvwrapper.sh
保存之后,source ~/.bash_profile,virtualenvwrapper就生效了。
执行命令workon,就能看到列出来我们已经建好的python27,敲workon python27,就可以进入python2.7的虚拟环境了。退出依旧是deactivate。
我virtualenvwrapper创建、删除虚拟环境也很方便,有mkvirtualenv和rmvirtualenv等命令提供,可自行Google。
3.uwsgi+django
这里主要介绍之前提到的坑,我最开始装在了/root目录下,然后运行uwsgi的时候--uid和--gid用了非root账户,然后就出现找不到各种包的情况,调了一整天。最后写了个个小的wsgi.py测试,分别打印root和非root账户的sys.path才发现其中差异,真正坑死。
好吧,就介绍这么多,整体没太多技术含量,就是注意那个坑就好。