摘要:确保当前系统安装了。解压缩文件,然后进入源码目录下。在终端执行命令,然后执行编译安装。至此,升级完成。后记因为当时项目条件的原因,才有了下源码编译安装的奇怪需求,实际开发中,建议大家直接使用自带的版本,会省去许多麻烦。
笔者序
偶然间翻出一篇去年帮公司安装开发环境后记下的关于Python安装的笔记,特来向大家分享。
犹记得当时Python版本切换的问题困扰了我,以及整个项目组好久,因为按照正常的方法,安装Python本身没有问题,且能基本使用,但使用的过程中出现了大量包引用以及其他问题,后来发现这一切和本地库的路径,以及系统编码和Python源码编码的冲突有关,本文会着重说明。
准备工作Python2.7.9源码包:Python-2.7.9.tgz。
确保当前系统安装了gcc。
确保当前系统可以安装rpm包。
在更新Python版本前,安装好需要使用的库(所有要安装的库必须兼容新版本,即Python2.7.9),如tkinter,sqlite等。
安装过程
在终端输入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。
升级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)方法中可以解决sqlite3的import问题,但使用过程中会出现其他异常,这里一定要注意。
至此,Python升级完成。
后记因为当时项目条件的原因,才有了CentOS-6.5下源码编译安装Python2.7的奇怪需求,实际开发中,建议大家直接使用自带Python2.7的Linux版本,会省去许多麻烦。
当然了,有时候也确实会因为环境升级,项目迭代等原因需要更新Python版本的,无论哪个版本,均可参考本文,原理大同小异。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/38083.html
摘要:因为自带的版本过低,会导致编译通不过。设置环境变量以上设置的环境变量都是临时的,建议设置成永久全局变量。这时候如果出现错误,重新运行命令如果仍然报错,比如打不开某个文件,把下的全部删掉。 Step1 安装git服务,用于从github拉取rocksdb源代码.如果你想从源码安装最新版git,参考源码安装git # yum install git 安装后可以使用git --versio...
阅读 982·2023-04-25 22:27
阅读 850·2021-11-22 14:56
阅读 938·2021-11-11 16:54
阅读 1637·2019-08-30 15:54
阅读 3478·2019-08-30 13:20
阅读 1192·2019-08-30 10:55
阅读 2054·2019-08-26 13:34
阅读 3258·2019-08-26 11:53