CENTOS 7 升级安装 Python 3.5

 

写在前面的话

本文采取源码的方式安装 Python 3.5.2,如果是其它版本会有或多或少的差异,且写这篇的时候官网最新的是 Python 3.7,个人使用 3.5 就足够了,没必要更新到最新,否则出现未知 BUG 你都不知道该找谁!

特别说明,本文安装之后系统的默认 Python 版本将变成 3.5.2,但是这并不影响本身 2.7 的使用!

文章最后附带了 CENTOS 7 升级 Python 3 的一键安装脚本!

环境说明
服务
版本
操作系统
CentOS Linux release 7.5.1804
远程工具
Xshell 5
Python
3.5.2
开始安装

【1】Python 下载地址:

https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz

【2】安装常见依赖包:

yum -y install zlib-devel bzip2-devel wget openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

【3】上传源码包到 /usr/local/src 并解压:

cd /usr/local/src/

# 解压
xz -d Python-3.5.2.tar.xz
tar -xf Python-3.5.2.tar

【4】编译安装:

# 编译安装
cd Python-3.5.2
./configure --prefix=/usr/local/python35 --enable-shared CFLAGS=-fPIC
make && make install

【5】添加环境变量:

# 添加环境变量
echo 'export PATH=$PATH:/usr/local/python35/bin' >>/etc/profile

【6】添加新的 Python 命令指向:

# 修改系统默认的 Python 2.7
rm -f /usr/bin/python
ln -s /usr/local/python35/bin/python3 /usr/bin/python
ln -s /usr/local/python35/bin/pip3.5 /usr/bin/pip

【7】修改库依赖,避免使用报错:

ldd /usr/local/python35/bin/python3

如图:

备注:可以看到这里有一个 not found,解决办法如下:

cp /usr/local/python35/lib/libpython3.5m.so.1.0 /lib64/

再度查看:

【8】生效环境变量:

source /etc/profile

【9】修改 yum 配置:如果不修改,yum 将无法使用!

# 修改 yum
sed -i "s#/usr/bin/python#/usr/bin/python2.7#g" /usr/bin/yum
sed -i "s#/usr/bin/python#/usr/bin/python2.7#g" /usr/libexec/urlgrabber-ext-down

【10】查看升级结果:

【11】配置 pip:

# 升级 PIP 和安装 virtualenv
pip install --upgrade pip
pip install virtualenv

【12】CENTOS 7 Python 3 升级完成!

一键安装脚本
#!/bin/bash


###################################################################
# author:  Dylan
# useage: Update Python 3.5
###################################################################


###################################################################
# 输出颜色定义
###################################################################
Color_Text() {
  echo -e " \e[0;$2m$1\e[0m"
}

Echo_Red() {
  echo $(Color_Text "$1" "31")
}

Echo_Green() {
  echo $(Color_Text "$1" "32")
}

Echo_Yellow() {
  echo $(Color_Text "$1" "33")
}


###################################################################
# 变量定义
###################################################################
# Python 版本
Python_Version='3.5.2'

# Python 安装包
Python_Package="Python-${Python_Version}"

# Python 下载地址
Python_Url="https://www.python.org/ftp/python/${Python_Version}/${Python_Package}.tar.xz"

# 下载路径
Download_Path='/usr/local/src'

# 安装路径
Install_Path='/usr/local/python35'


###################################################################
# 网络检查函数
###################################################################
NETWORK_CHECK() {
    ping www.baidu.com -c 3
    if [ $? != 0 ];then
        Echo_Red "该服务器无法连网,请配置服务器网络!"
        exit 1
    fi
}


###################################################################
# 升级 Python 函数
###################################################################
PYTHON_UPDATE() {

    # 检查网络
    NETWORK_CHECK

    # 安装依赖
    Echo_Yellow "==========================================================================="
    Echo_Green '安装依赖:'
    Echo_Yellow "==========================================================================="
    yum -y install zlib-devel bzip2-devel wget openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

    # 检查 Python 版本
    Echo_Yellow "==========================================================================="
    Echo_Green '当前版本 Python:'
    Echo_Yellow "==========================================================================="
    /usr/bin/python -V
    Echo_Yellow "==========================================================================="

    # 选择确认
    read -p "是否继续升级 Python [y/n]:" Chose_Number
    case ${Chose_Number} in
        [yY][eE][sS]|[yY])
            Echo_Yellow "你选择的是yes,升级继续进行..."
        ;;
        [nN][oO]|[nN])
            Echo_Yellow "你选择的是yes,升级即将终止..."
            exit
        ;;
        *)
            Echo_Red "输入错误,即将退出升级..."
            exit
    esac


    # 下载安装包
    Echo_Yellow "==========================================================================="
    Echo_Green "开始从网上下载 ${Python_Package}..."
    Echo_Yellow "==========================================================================="
    cd ${Download_Path}
    wget ${Python_Url}
    if [ $? != 0 ];then
        Echo_Red "网上下载 ${Python_Package} 失败,请检查!"
        exit 1
    fi
    
    Echo_Yellow "==========================================================================="
    Echo_Green "${Python_Package} 下载成功,即将开始升级..."
    Echo_Yellow "==========================================================================="
    Echo_Green "开始解压 Python ..."
    Echo_Yellow "==========================================================================="
    xz -d ${Python_Package}.tar.xz && tar -xf ${Python_Package}.tar
    if [ $? != 0 ];then
        Echo_Red "${Python_Package} 解压失败,请检查!"
        exit 1
    fi
    
    cd ${Python_Package}
    Echo_Yellow "==========================================================================="
    Echo_Green "开始安装 Python ..."
    Echo_Yellow "==========================================================================="
    ./configure --prefix=${Install_Path} --enable-shared CFLAGS=-fPIC
    make -j 4 && make install
    if [ $? != 0 ];then
        Echo_Red "${Python_Package} 编译失败,请检查!"
        exit 1
    fi

    # 配置环境变量
    Echo_Yellow "==========================================================================="
    Echo_Green "修改环境变量 ..."
    Echo_Yellow "==========================================================================="
    echo "export PATH=\$PATH:${Install_Path}/bin" >>/etc/profile

    # 修改原有的 Python 为新的
    Echo_Yellow "==========================================================================="
    Echo_Green "替换旧版 Python ..."
    Echo_Yellow "==========================================================================="
    mv /usr/bin/python /tmp
    ln -s ${Install_Path}/bin/python3 /usr/bin/python

    # 修改库文件
    Echo_Yellow "==========================================================================="
    Echo_Green "修改 Python 库文件 ..."
    Echo_Yellow "==========================================================================="
    ldd ${Install_Path}/bin/python3
    cp ${Install_Path}/lib/libpython3.5m.so.1.0 /lib64/

    # 修改 yum 配置
    Echo_Yellow "==========================================================================="
    Echo_Green "修改 yum ..."
    Echo_Yellow "==========================================================================="
    sed -i "s#/usr/bin/python#/usr/bin/python2.7#g" /usr/bin/yum
    sed -i "s#/usr/bin/python#/usr/bin/python2.7#g" /usr/libexec/urlgrabber-ext-down

    # 使配置生效
    source /etc/profile
    . /etc/profile
    
    # 升级 PIP
    Echo_Yellow "==========================================================================="
    Echo_Green "升级 PIP ..."
    Echo_Yellow "==========================================================================="
    pip install --upgrade pip
    pip install virtualenv

    # 查看升级后版本
    Echo_Green '当前版本 Python(请手动执行:source /etc/profile):'
    Echo_Yellow "==========================================================================="
    /usr/bin/python -V
    Echo_Yellow "==========================================================================="
}


###################################################################
# 开始升级 Python
###################################################################
Echo_Yellow "==========================================================================="
Echo_Green '作者:Dylan'
Echo_Green '备注:QQ:1214966109'
Echo_Yellow "==========================================================================="
sleep 2
PYTHON_UPDATE
小结

我个人是一直在用这种安装方式升级 Python,多环境推荐使用 virtualenv,如果你安装有问题,也可以通过上我博客首页的 QQ 与我取得联系,让我对这篇进行完善。

猜你喜欢

转载自www.cnblogs.com/Dy1an/p/9649923.html