CentOS7升级默认的python2.7.5至新版本

    由于CentOS7默认将自带的Python2.7.5用于很多系统相关的应用,所以升级Python会导致很多诸如yum的应用不能用。所以升级的思路在于在系统里另外安装一个新的Python版本(非默认的/usr/bin),然后通过建立软链的方式,保留原来的python2.7.5并将其指向系统需要的应用;而将PATH中的python指向新的python版本

1. 去python.org下载最新的Python-2.7.16.tgz源码包,解开:
tar zxvf Python-2.7.16.tgz
cd  Python-2.7.16

2. 编译安装:
0) 为了避免之后安装setuptool时会报错zlib缺失的问题
RuntimeError: Compression requires the (missing) zlib module
这里先安装zlib,否则将来装setuptool遇到问题还得回来重新编译安装python
yum install -y zlib
yum install -y zlib-devel
还有openssl:
yum install -y openssl
yum install -y openssl-devel
还有libffi-devel:这是为了避免在make install时出现下述错误:
ModuleNotFoundError: No module named '_ctypes'
yum install -y libffi
yum install -y libffi-devel
还有sqlite:这时为了避免pip install coverage时报错:
ModuleNotFoundError: No module named '_sqlite3'
yum install -y libsqlite3-dev
yum install -y sqlite-devel
1) 编译配置:
./configure --prefix=/usr/local/python2.7.16
这里的prefix指定了编译安装的位置。由于系统自带的python2.7.5在/usr/bin下,所以要选择一个不同的路径。另外出于便于区分的目的,所以加上2.7.16的版本号
2) 上述配置命令应该全部通过,结束后echo $?应该为0。如果报错,多半是因为缺少gcc,比如报错:
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
遇到这种情况安装gcc
yum install -y gcc
然后重新编译配置直至成功
3) 编译并安装
make
make install
4) 验证一下
cd /usr/local/python2.7.16/bin
python
Python 2.7.16 (default, Jun  4 2019, 18:47:37)

3. 重新配置系统python的path,保留旧的python2.7.5指向系统需要应用如yum
1) 保存原有的/usr/bin/python和/usr/bin/python2,这两个都是软链,而且是串行的软链。备份时不用这么麻烦,直接删掉重新建软链就行了
cd /usr/bin
rm /usr/bin/python
rm /usr/bin/python2
ln -s /usr/bin/python2.7 python2.7.5
ln -s /usr/bin/python2.7 python2-old
2) 拷贝并建立新的软链指向新的python2.7.16版本
cd /usr/bin
cp /usr/local/python2.7.16/bin/python /usr/bin
ln -s /usr/local/python2.7.16/bin/python2 python2
检查/usr/bin下的关联:
ls -al
-rwxr-xr-x   1 root root   8295168 Jun  4 18:57 python
lrwxrwxrwx   1 root root        35 Jun  4 19:01 python2 -> /usr/local/python2.7.16/bin/python2
lrwxrwxrwx   1 root root         9 Dec 14  2016 python2-old -> python2.7
-rwxr-xr-x   1 root root      7136 Nov  6  2016 python2.7
lrwxrwxrwx   1 root root         9 Jun  4 19:00 python2.7.5 -> python2.7
3) 更新yum指向备份的原有python2.7.5:
vi /usr/bin/yum
将第一行从
#!/usr/bin/python
改为
#!/usr/bin/python2.7.5
试一下yum
yum list
4) 如果yum install时报错,比如yum install unzip时报错:
 Downloading packages:
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
Exiting on user cancel

这是因为上述错误中的/usr/libexec/urlgrabber-ext-down脚本同样也使用了原来的python,和yum一样,vi改一下文件头的python:
vi /usr/libexec/urlgrabber-ext-down
将第一行从
#! /usr/bin/python
改为
#! /usr/bin/python2.7.5
再yum install即可

4. 重新安装pip和setuptool
到pypi上下载最新版本的setuptool和pip,并安装
1) 安装setuptool
unzip setuptools-41.0.1.zip
cd setuptools-41.0.1
python setup.py install
2) 安装pip
tar xvf pip-18.0.tar
cd pip-18.0
python setup.py install
3) 试验一下pip
pip install requests
如果报错找不到pip,那么需要把新的python路径加到PATH中去
vi ~/.bash_profile
PATH=$PATH:/usr/local/python2.7.16/bin
export PATH

note: 如果要安装python3,流程基本同上

5. 安装epel,否则像cloc, pylint这些包yum都没有,比较麻烦
yum install epel-release -y
yum clean all && yum makecache 

评论

此博客中的热门博文

Windows上调试C/C++程序时自动产生coredump的设置方法

利用Gitlab的Jira issue tracker实现Jira issue自动根据Gitlab commit/merge更新状态

go用xorm去update数据库的一个坑