记录一些常用的函数和瞎折腾的过程……

将CentOS7中的Python升级为3.5.7

提醒:本文最后更新于 1699 天前,文中所描述的信息可能已发生改变,请谨慎使用。

centos自带的python一般是2.7,版本比较低,且已不再支持,我们可以手动升级。

安装前一定要先查看gcc是否安装,和openssl是否是1.1.1版本:

[root@server ~]# gcc -v
[root@server ~]# openssl version

如果没有安装,请先按下面的方法安装。

一、查看当前版本:

[root@server ~]# python -V
Python 2.7.5

二、下载安装新版本:

1、我选择的版本是 3.7.7 (其它版本到这里选择:https://www.python.org/ftp/python/):

[root@server ~]# wget https://www.python.org/ftp/python/3.5.7/Python-3.5.7.tgz

2、下载完成之后,进行解压缩:

[root@server ~]# tar -zxvf Python-3.5.7.tgz

3、进入解压缩后的目录,安装配置:

[root@server ~]# cd Python-3.5.7/
[root@server ~]# ./configure

4、配置完成之后,就可以编译了:

[root@server ~]# make

5、编译完成后,进行安装:

[root@server ~]# make install

6、安装成功以后,就可以查看 Python 的版本了:

[root@server ~]# python -V
Python 2.7.5
[root@server ~]# python3 -V
Python 3.7.7

注意:在执行 ./configure 时,如果报错:

configure: error: no acceptable C compiler found in $PATH

说明没有安装合适的编译器。这时,需要安装/升级 gcc 及其它依赖包。

[root@server ~]# yum install make gcc gcc-c++

完成之后,再重新执行:

[root@server ~]# ./configure --prefix=/usr/local/python3

或是报错:

[root@server ~]# ModuleNotFoundError: No module named '_ctypes'

3.7版本需要一个新的包libffi-devel,要执行下面的命令:

[root@server ~]# yum -y install libffi-devel

或是报错:

[root@server ~]# zipimport.ZipImportError: can't decompress data; zlib not available

需要安装zlib相关依赖包:

[root@server ~]# yum -y install zlib*

3.x的python的版本对openssl也有要求,安装前先升级openssl到1.1.1和版本,更新openssl方法如下:

(1)下载openssl:

[root@server ~]# wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz
[root@server ~]# tar -zxvf openssl-1.1.1e.tar.gz
[root@server ~]# cd openssl-1.1.1e

(2)编译安装:

[root@server ~]# ./config --prefix=/usr/local/openssl no-zlib #不需要zlib
[root@server ~]# make
[root@server ~]# make install

(3)备份原配置:

[root@server ~]# mv /usr/bin/openssl /usr/bin/openssl.bak
[root@server ~]# mv /usr/include/openssl/ /usr/include/openssl.bak

(4)新版配置:

[root@server ~]# ln -s /usr/local/openssl/include/openssl /usr/include/openssl
[root@server ~]# ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so
[root@server ~]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

(5)修改系统配置:

## 写入openssl库文件的搜索路径
[root@server ~]# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
## 使修改后的/etc/ld.so.conf生效
[root@server ~]# ldconfig -v

(6)查看openssl版本:

[root@server ~]# openssl version

最后重新编译python:

[root@server ~]# ./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl
[root@server ~]# make
[root@server ~]# make install

三、python链接更新为新版本:

1、查看Python的路径,在/usr/bin下面。可以看到python链接的是python2.7,所以,执行python就相当于执行python 2.7。

[root@server ~]# ls -al /usr/bin | grep python
lrwxrwxrwx. 1 root root 9 Nov 14 18:39 python -> python2.7

2、将原来python的软链接重命名:

[root@server ~]# mv /usr/bin/python /usr/bin/python.bak

3、将python链接至python3:

[root@server ~]# ln -s /usr/local/bin/python3 /usr/bin/python

这时,再查看 Python 的版本:

[root@server ~]# python -V
Python 3.7.7

4、同时将pip命令链接指向pip3:

查看pip当前链接:

[root@server ~]# ls -al /usr/bin | grep pip

移除当前pip链接:

[root@server ~]# mv /usr/bin/pip /usr/bin/pip.bak

建立新链接到pip3:

[root@server ~]# ln -s /usr/local/bin/pip3 /usr/bin/pip

四、升级到Python3后,由于将默认的python指向了python3,yum不能正常使用,需要编辑yum的配置文件:

同时修改以下几个文件:

[root@server ~]# vi /usr/bin/yum
[root@server ~]# vi /usr/libexec/urlgrabber-ext-down
[root@server ~]# vi /usr/bin/yum-config-manager

修改文件头:#!/usr/bin/python 改为 #!/usr/bin/python2,保存退出即可。

注意:若文件yum-config-manager不存在,可能没有安装yum-utils包,此时需要执行:

yum -y install yum-utils