Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1161350
  • 博文数量: 220
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1769
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-13 16:19
个人简介

努力, 努力, 再努力

文章分类

全部博文(220)

文章存档

2018年(8)

2017年(46)

2016年(75)

2015年(92)

我的朋友

分类: Python/Ruby

2016-04-28 18:50:42

感谢HXY同学和cherubines

Python 2.6.6 升级到python 2.7.10

 

一.文档说明

因工作需要,为现有的OpenVPN服务器写一个管理页面

主要功能:

管理员登录可以添加VPN用户,修改VPN用户密码

普通用户登录只能修改自已的VPN登录密码和WEB页面的登录密码

开发环境: python 2.7.10 + flask-0.10.1+ mysql 5.1.73

开发工具: PyCharm 5.0.4

       将代码部署到线上环境,系统自带的python2.6.6 无法正常运行。

       python2.6.6 升级到2.7.10 坑比较多,防止日后遗忘,特此写个备忘。

二.组件说明

          1. centos6.5 : 自带python2.6.6 , yum程序依赖python2.6.6

            2. python2.7.10: windows上写的flask程序是基于python2.7.10

解释器,因此必须把线上环境升级到python2.7.10

          3. virtualenv是虚拟python环境

              virtualenv是一个Python环境配置和切换的工具,可以用它配置多个

Python运行环境,和系统中的Python环境隔离,即所谓的沙盒。

沙盒的好处包括:

(1)解决库之间的版本依赖,比如同一系统上不同应用依赖同一个库的不同版本。

(2)解决权限限制,比如你没有 root 权限。

(3)尝试新的工具,而不用担心污染系统环境。

使用virtualenv 的目标,即要保留系统自带的python2.6.6, 又要使用新安装的python2.7.10

4. pip: pip也是一个包管理工具,它和setuptools类似,如果使用virtualenv,会自动安装一个pip

使用pip 可以很方便的安装flask程序所依赖的多个扩展包

5. setuptools

setuptools管理Python的第三方包,将包安装到site-package下,安装的包后缀一般为.egg,实际为ZIP格式。默认从 下载包,能够解决Python包的依赖关系。

是目前 python 包管理的事实标准,2008年发布。它被用作 easy_install 的替代品,但是它仍有大量的功能建立在 setuptools 组件之上。

由于pip还有大量功能建立在setuptools 组件之上,因此,安装pip还必须要安装setuptools

6. wheel

本质上是一个 zip 包格式,它使用 .whl 扩展名,用于 python 模块的安装,它的出现是为了替代 Eggs

 

三.环境说明

                  1. 系统版本:centos6.5 (mini Desktop类型安装)

              2. 内核版本: 2.6.32-431.el6.x86_64

              3. python版本: Python 2.6.6

              4. python版本: python 2.7.10

              5. virtualenv 版本:15.0.1 (最新2016-3-17)

              6. pip版本: 8.1 (virtualenv 15.0.1 自动安装)

              7. setuptools: 20.3 (virtualenv 15.0.1 自动安装)

              7. wheel版本:wheel 0.29.0 (virtualenv 15.0.1 自动安装)

 

四.安装前的依赖包安装

              这点很重要,其实python的安装过程还是比较智能的。

只要zlib-devel, openssl-devel这些包都用YUM安装上,python安装过程会自动找到这些包的头文件。

但如果不提前将安装依赖包,将会遇到很多的坑

       yum install epel-release -y

       yum install gcc gcc-c++ autoconf automake zlib-devel openssl-devel readline-devel sqlite-devel sqlite2-devel-y

 

五.软件包下载

       Python 2.7.10

       wget

      

       官网:

六.安装python 2.7.10

     1. 解压,配置,安装

              tar -zxvf Python-2.7.10.tgz

              cd Python-2.7.10

              ./configure --prefix=/usr/local/python2.7

              make && make install

     2. 配置环境变量

              vim /etc/profile

              最后一行添加: export PATH=/usr/local/python2.7/bin:$PATH

              导入环境变量:source /etc/profile

      

3. 验证新版本python

       [root@vpntest ~]# python

Python 2.7.10 (default, Apr 20 2016, 21:31:00)

[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2

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

 

 

    . 安装virtualenv 15.0.1

                 

       说明:

安装virutalenv 主要目的是不希望新的python2.7.10影响系统原有的python

因为,yum还再使用python2.6.6

     1. 下载virtualenv 15.0.1软件包

       wget --no-check-certificate   

 

官网链接:

 

另外还可以从

---->PyPI菜单 进入

再搜索virtualenv关键字

%3Aaction=search&term=virtualenv&submit=search

      

     2. 解压,安装

tar -zxvf virtualenv-15.0.1.tar.gz

cd virtualenv-15.0.1

 

[root@vpntest virtualenv-15.0.1]# python setup.py install

running install

running build

running build_py

running build_scripts

creating build/scripts-2.7

copying and adjusting scripts/virtualenv -> build/scripts-2.7

changing mode of build/scripts-2.7/virtualenv from 644 to 755

running install_lib

copying build/lib/virtualenv.py -> /usr/local/python2.7/lib/python2.7/site-packages

creating /usr/local/python2.7/lib/python2.7/site-packages/virtualenv_support

copying build/lib/virtualenv_support/wheel-0.29.0-py2.py3-none-any.whl -> /usr/local/python2.7/lib/python2.7/site-packages/virtualenv_support

copying build/lib/virtualenv_support/pip-8.1.1-py2.py3-none-any.whl -> /usr/local/python2.7/lib/python2.7/site-packages/virtualenv_support

copying build/lib/virtualenv_support/argparse-1.4.0-py2.py3-none-any.whl -> /usr/local/python2.7/lib/python2.7/site-packages/virtualenv_support

copying build/lib/virtualenv_support/__init__.py -> /usr/local/python2.7/lib/python2.7/site-packages/virtualenv_support

copying build/lib/virtualenv_support/setuptools-20.3-py2.py3-none-any.whl -> /usr/local/python2.7/lib/python2.7/site-packages/virtualenv_support

byte-compiling /usr/local/python2.7/lib/python2.7/site-packages/virtualenv.py to virtualenv.pyc

byte-compiling /usr/local/python2.7/lib/python2.7/site-packages/virtualenv_support/__init__.py to __init__.pyc

running install_scripts

copying build/scripts-2.7/virtualenv -> /usr/local/python2.7/bin

changing mode of /usr/local/python2.7/bin/virtualenv to 755

running install_egg_info

Writing /usr/local/python2.7/lib/python2.7/site-packages/virtualenv-15.0.1-py2.7.egg-info

 

3. 验证新版本

[root@vpntest ~]# virtualenv --version

15.0.1

创建python2.7虚拟环境:自动安装setuptools, pip, wheel.

[root@vpntest ~]# virtualenv venv27               (venv27是虚拟环境的名子,随便起)

New python executable in /root/venv27/bin/python

Installing setuptools, pip, wheel...done.

4. 安装相关的flask及相关的扩展

       (1) 安装flask扩展集合的依赖包,mysql mysql-server,mysql-devel

           yum install mysql mysql-server mysql-devel

       (2) 上传flask扩展需求文件:

         [root@vpntest ~]# cat requirement.txt

(requirement.txt包含了开发环境安装的flask扩展包)

alembic==0.6.2

blinker==1.3

chardet==2.3.0

docutils==0.12

dominate==2.1.17

Flask==0.10.1

Flask-Bootstrap==3.0.3.1

Flask-Login==0.3.1

Flask-Mail==0.9.0

Flask-Migrate==1.1.0

Flask-Moment==0.2.1

Flask-MySQLdb==0.2.0

Flask-Script==0.6.6

Flask-SQLAlchemy==1.0

Flask-WTF==0.9.4

funcsigs==1.0.0

itsdangerous==0.23

Jinja2==2.7.1

lamson==1.3.4

lockfile==0.12.2

Mako==0.9.1

MarkupSafe==0.18

mock==2.0.0

mysqlclient==1.3.7

nose==1.3.7

ordereddict==1.1

pbr==1.9.1

python-daemon==2.1.1

python-editor==1.0

python-modargs==1.7

six==1.10.0

SQLAlchemy==0.9.9

visitor==0.1.2

Werkzeug==0.10.4

wheel==0.29.0

WTForms==1.0.5

 

如果requirement.txt里的包版本低于现有环境的包版本,

pip将卸载较新的版本,安装requirement.txt里指定的版本

       (3) 安装flask扩展包

       source venv27/bin/activate  进入沙盒,注意venv27在当前目录

       pip install -r requirement.txt

 

安装截图:


 


       在此之后,就可以设置mysql数据,创建库表,迁移数据库,上传代码,做初步代码功能测试了

 

     八.总结惯性思维是个陷阱

          1. 熟悉英文很重要

                       源码编译时遇到的非停滞,非ERROR级别的错误提示不能忽略,即使英文不好也要看明白,否则这将是个大坑

          2. 搞清楚流程中各个步骤的目的,相互关系很重要。

python 各个组件包之间的相互关系没搞清楚,setuptools, pip, wheel之间是怎么回事都不明白。这导致整个安装过程只能按百度的文档按部就班的操作,有时根本不清楚某些步骤是什么目标。不知道自己在做什么。

          3. linux 之下无论是否是源码安装,YUM, 源码,python,都会存在包与包之间的依赖关系。绝不能忽略

4. 大致排障过程

                之前源码安装遇到configure报错,过程会停止不前,直到“ERROR级别”的报错全部排除,configure过程才能顺利通过,偶尔会遇到warning级警告,但configure过程会通过,make, make install过程也会通过,此时,软件的安装过程基本就算正常完成了。

                       但这次安装python 2.7.10 却大不相同. Python 2.7.10 configure过程时通过,但报告如下:

Python build finished, but the necessary bits to build these modules were not found:

_curses            _curses_panel      _sqlite3       

_ssl               _tkinter           bsddb185       

bz2                dl                 imageop        

readline           sunaudiodev        zlib           

To find the necessary bits, look in setup.py in detect_modules() for the module's name.

 

               这个报错未理会,由此挖了个大坑,坑了自己

   这里提示zlib, _ssl未安装,pthon2.7.10编译安装过程完成,但在安装setuptools时,报告zlib未安装,此时,误以为setuptools需要zlib zlib-devel, 于是YUM安装,但很显然是无效的。直接跳过setuptools,安装pip,又提示需要setuptools

      直接安装virtualenv 14.0.2 一路报错。

                       后又重新编译安装python2.7.10, 这时不在提示zlib了,又提示缺少ssl模块,同样,setuptools无法安装,pip无法安装。

       再后来翻看了隋总的日记,需要YUM安装zlib-devel, openssl-devel等包,恍悟。原来根本原因没有安装依赖的开发包。(头天看了隋总的日志,但没到这篇)

              

          安装了依赖包,zlib-devel, openssl-devel, readline-devel sqlite-devel sqlite2-devel-y

再安装python2.7.10就非常顺利了,然后是安装virtualenv 15.0.1(最新版本2016-3-17)

Virtualenv 在创建虚拟环境时自动安装pip, setuptools, wheel

此时,再执行pip install –r requirement.txt, 非常顺利。至此结束。

              



阅读(1659) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~