截止目前,centos6系列的最新版本是centos6.9,内置的python版本依然是2.6.6,出于api和abi的稳定性考虑,redhat是不会自己升级python版本的,但是,很多时候我们非常需要使用较新的版本,由于python是系统默认集成的,即使是最小化安装的系统,默认已经自带了python,如果自己安装不当,很可能对系统造成破坏。本文主要就是在centos6.9上面安装Python2.7.15版本进行说明,如果你要安装Python3.x系列,理论上应该是一样的。

首先是环境准备:

yum install gcc zlib-devel expat-devel bzip2-devel sqlite-devel \
openssl-devel readline-devel gdbm-devel ncurses-devel xz-devel tk-devel

注意,前面几个包都是Python编译安装需要的,有些组件,db4-devel可以选装。

下载python:

curl -L -O  https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tar.xz

解压安装:

tar xf Python-2.7.15.tar.xz
cd Python-2.7.15

./configure --enable-ipv6 --enable-shared \
LDFLAGS="-Wl,-rpath /usr/local/lib" \
--with-system-expat --with-system-ffi \
--enable-unicode=ucs4 \
--with-ensurepip=install

make -j${nproc}
make altinstall

如果要在标准目录下安装,可以这样

cd Python-2.7.15
curl -L -O https://src.fedoraproject.org/rpms/python2/raw/master/f/00102-2.7.13-lib64.patch
curl -L -O https://src.fedoraproject.org/rpms/python2/raw/master/f/python-2.7-lib64-sysconfig.patch
curl -L -O https://src.fedoraproject.org/rpms/python2/raw/master/f/00104-lib64-fix-for-test_install.patch
patch -p1 < 00102-2.7.13-lib64.patch
patch -p1 < python-2.7-lib64-sysconfig.patch
patch -p1 < 00104-lib64-fix-for-test_install.patch

配置可以这样配置:

./configure --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib64 --localstatedir=/var --sharedstatedir=/var/lib \
--enable-ipv6 --enable-shared --enable-unicode=ucs4 --with-system-expat --with-system-ffi \
--enable-optimizations LDFLAGS='-Wl,-z,relro -Wl,-z,now' --with-ensurepip=install

make -j4
make altinstall

如果你用更高版本的gcc,configure的时候可以加上优化选项

./configure --with-ensurepip=install --enable-optimizations

在centos6自带的低版本gcc(4.4.7)下,优化选项好多特性不支持,所以会报错。

最后的提示应该是类似这样的:

Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-9.0.3 setuptools-39.0.1

稍微解释下配置,–with-ensurepip=install是同步安装pip和easy_install,现在的python源码自带此功能,加个参数就能开启了。默认的安装路径是/usr/local, 这里也没有变更。最后不用make install是怕替换系统已有的组件,所以用make altinstall。我们的主程序是python2.7和pip2.7。

我们查看下版本:

python2.7 -V

输出结果:

Python 2.7.15

有时,我们不想用python2.7来执行,想直接用python命令执行新版本的python,我们可以做个软连接。

ln -sf /usr/local/bin/python2.7 /usr/bin/python

这里会把老的2.6的python执行程序替换掉,但不用担心,/usr/bin/python2.6这个程序其实是个硬连接文件,2.6的执行程序还在的。

因yum只能在python2.6下运行,我们把yum脚本改下环境:

vim /usr/bin/yum

把文件开始的#!/usr/bin/python改成#!/usr/bin/python2.6即可。

再把pip的软连接做下:

ln -s /usr/local/bin/pip2.7 /usr/bin/pip

好了,大功告成,需要注意的是,我们已经把主执行程序改成了python2.7,除了yum需要改环境外,不排除其他的python脚本出问题,所以要不要对python2.7做软连接还是取决于你,但这个好处是如果我们想切换回来,系统原先的2.6的python其实都还在,可以随时恢复回去。

更好的建议是,我推荐安装scl的源安装python,这个原理有点像python中的虚拟环境,一点也不影响系统原先的组件,可以随时切换,大家可以看下我以前的这篇文章

centos6安装python2.7教程
Tagged on:     

发表评论

电子邮件地址不会被公开。 必填项已用*标注