CentOS-6.5源码编译安装Python2.7.9

笔者序

偶然间翻出一篇去年帮公司安装开发环境后记下的关于Python安装的笔记,特来向你们分享。python

犹记得当时Python版本切换的问题困扰了我,以及整个项目组很久,由于按照正常的方法,安装Python自己没有问题,且能基本使用,但使用的过程当中出现了大量包引用以及其余问题,后来发现这一切和本地库的路径,以及系统编码和Python源码编码的冲突有关,本文会着重说明。linux

准备工做

  • Python2.7.9源码包:Python-2.7.9.tgzsql

  • 确保当前系统安装了gccvim

  • 确保当前系统能够安装rpm包。bash

  • 在更新Python版本前,安装好须要使用的库(全部要安装的库必须兼容新版本,即Python2.7.9),如tkintersqlite等。python2.7

安装过程

  1. 在终端输入python进入Python解释器界面,输入以下内容:编码

    import sys
    print sys.maxunicode

    若是结果<=65535,跳过第3步。[1]spa

  2. 解压缩Python-2.7.9.tgz文件,而后进入Python-2.7.9源码目录下。操作系统

  3. 打开configure文件,找到have_ucs4_tcl=no(大概在13047行),将其改成have_ucs4_tcl=yes,保存并退出。[2]code

  4. 在终端执行命令./configure --prefix=/usr/local/,而后执行make && make install编译安装。

  5. 在终端执行命令ln -sf /usr/local/bin/python2.7 /usr/bin/python,将系统默认Python版本改成Python2.7.9

  6. 在终端执行python -V查看当前版本。

笔者注:

[1]:若是sys.maxunicode <= 65535,则当前系统下Python环境编码为UCS2> 65535则为UCS4,新环境须要与其一致。
[2]:该行是决定当前Python编译后编码的关键,改为yes则为UCS4

环境完善

yum

升级Python版本之后,会出现图-1所示yum没法使用的状况,这是由于yum自己是Python写的,而CentOS-6.5下的yum不支持Python2.7.9,这时候咱们须要编辑/usr/bin/yum文件的第一行:#!/usr/bin/python,将其改成#!/usr/bin/python2.6便可。

图-1 yum没法使用

其余库和模块

不少时候安装了新Python环境后,会出现大量ImportError的异常状况——尽管咱们在升级环境前已经安装好了那些库。

这种时候咱们的第一反应每每是从新安装这些库,但这样每每会比较麻烦(若是库很是多),并容易形成本地库资源重复和冗余,并且有部分库在从新安装了之后依然没法使用(譬如sqlite3),此时咱们只需让新Python使用本地库便可(这也是在准备工做阶段说过的那些安装的库必须兼容Python2.7.9环境的缘由),具体操做以下:

1.在终端执行/usr/bin/python2.6,进入系统原自带Python2.6的解释器,执行以下命令:

import sys
print ‘\n’.join(sys.path)

来查看本地全部Python库的路径,通常以下:

/usr/lib64/python26.zip
/usr/lib64/python2.6
/usr/lib64/python2.6/plat-linux2
/usr/lib64/python2.6/lib-tk
/usr/lib64/python2.6/lib-old
/usr/lib64/python2.6/lib-dynload
/usr/lib64/python2.6/site-packages
/usr/lib/python2.6/site-packages

退出解释器,执行python命令进入当前Python环境的解释器,并执行一样命令获取Python2.7的库目录:

/usr/local/lib/python27.zip
/usr/local/lib/python2.7
/usr/local/lib/python2.7/plat-linux2
/usr/local/lib/python2.7/lib-tk
/usr/local/lib/python2.7/lib-old
/usr/local/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/site-packages

2.让新Python环境使用本地库有两种方法:

  1. 把本地库的路径添加到系统环境变量中,执行vim ~/.bashrc编辑环境变量文件,在文件末尾加上export PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.6/lib-dynload/:/Other paths:/…,不一样路径用冒号分割,再执行source ~/.bashrc当即在当前终端生效,全局生效须要重启操做系统。

  2. 把所需的库复制或移动到Python2.7的对应目录下,譬如sqlite3会抛ImportError: No module named _sqlite3异常,只须要将/usr/lib64/python2.6/lib-dynload/_sqlite3.so文件放到/usr/local/lib/python2.7/lib-dynload/目录下便可。

前面在安装过程当中涉及到一个安装编码的问题,若是Python2.7的编码与本机Python编码不一致,Python2.7将没法使用本地库,表面上在上述2)方法中能够解决sqlite3import问题,但使用过程当中会出现其余异常这里必定要注意

至此,Python升级完成。

后记

由于当时项目条件的缘由,才有了CentOS-6.5下源码编译安装Python2.7的奇怪需求,实际开发中,建议你们直接使用自带Python2.7Linux版本,会省去许多麻烦。

固然了,有时候也确实会由于环境升级,项目迭代等缘由须要更新Python版本的,不管哪一个版本,都可参考本文,原理大同小异。

相关文章
相关标签/搜索