资讯专栏INFORMATION COLUMN

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

DevTalking / 2227人阅读

摘要:确保当前系统安装了。解压缩文件,然后进入源码目录下。在终端执行命令,然后执行编译安装。至此,升级完成。后记因为当时项目条件的原因,才有了下源码编译安装的奇怪需求,实际开发中,建议大家直接使用自带的版本,会省去许多麻烦。

笔者序

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

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

准备工作

Python2.7.9源码包:Python-2.7.9.tgz。

确保当前系统安装了gcc

确保当前系统可以安装rpm包。

在更新Python版本前,安装好需要使用的库(所有要安装的库必须兼容新版本,即Python2.7.9),如tkintersqlite等。

安装过程

在终端输入python进入Python解释器界面,输入如下内容:

import sys
print sys.maxunicode

如果结果<=65535,跳过第3步。[1]

解压缩Python-2.7.9.tgz文件,然后进入Python-2.7.9源码目录下。

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

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

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

在终端执行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即可。

其他库和模块

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

这种时候我们的第一反应往往是重新安装这些库,但这样往往会比较麻烦(如果库非常多),并容易造成本地库资源重复和冗余,而且有部分库在重新安装了以后依然无法使用(譬如sqlite3),此时我们只需让新Python使用本地库即可(这也是在准备工作阶段说过的那些安装的库必须兼容Python2.7.9环境的原因),具体操作如下:

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

import sys
print ‘
’.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环境使用本地库有两种方法:

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

把所需的库复制或移动到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版本的,无论哪个版本,均可参考本文,原理大同小异。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38083.html

相关文章

  • CentOS 6.5 编译 rocksdb java

    摘要:因为自带的版本过低,会导致编译通不过。设置环境变量以上设置的环境变量都是临时的,建议设置成永久全局变量。这时候如果出现错误,重新运行命令如果仍然报错,比如打不开某个文件,把下的全部删掉。 Step1 安装git服务,用于从github拉取rocksdb源代码.如果你想从源码安装最新版git,参考源码安装git # yum install git 安装后可以使用git --versio...

    XanaHopper 评论0 收藏0

发表评论

0条评论

DevTalking

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<