写在前面的话
本文采取源码的方式安装 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$1e[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
ln -s ${Install_Path}/bin/pip3.5 /usr/bin/pip # 修改库文件 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 与我取得联系,让我对这篇进行完善。