将CentOS系统默认的python一键自动升级到最新的2.7.13版本
来源:互联网 发布:mac如何更改文件夹 编辑:程序博客网 时间:2024/05/28 20:19
脚本用途
将系统默认的python2.6版本到最新的python2.7.13,原有的python2.6继续保存
使用方法
复制下面的代码保存到upgradePython.sh,并赋可执行权限chmod +x upgradePython.sh
失败处理
亲测通过,但不排除某些特殊情况下遇到错误无法成功。
自动升级安装失败时,请参考手动升级:http://blog.csdn.net/yu12377/article/details/72764324
注意:因为下载python与pip源码速度一般都较慢,导致整个脚本长时间卡住,建议先手动下载完源码,再将源码与脚本放在同一目录,然后再执行脚本,这样体验会好很多。
#!/bin/bash# 脚本用途,将系统默认的python2.6版本到最新的python2.7.13,原有的python2.6继续保存# 彩色输出,定义变量red="\e[0;31m"green="\e[0;32m"yellow="\e[0;33m"endColor="\e[0m"# 判断当前是否已经是2.7.13版本,如果是直接退出【未完成,无法实现】#python_version=`python -V`#echo ${python_version}#if [[ "${python_version}" == "Python 2.7.13" ]]#then# echo -e "${green}当前已经是${python_version}版本,不需要升级${endColor}"# exit 0#else# echo -e "${green}当前python版本:${python_version}${endColor}"#fi# 展示当前python版本echo -e "${green}脚本用途,将Centos系统默认的python升级到最新的python2.7.13版,原有的python继续保存${endColor}"echo -e "${green}当前python版本${endColor}"python -Vread -p "按任意键继续升级,按键【control + C】退出升级" var# 检查当前用户是否有root权限res=`id|grep -c root`if [[ ${res} < 1 ]]then echo -e "${red}当前脚本需要root权限才能正确执行,请先切换到root用户${endColor}" exit 1fi# 安装依赖包echo -e "${green}通过yum安装依赖包:wget gcc Python-devel libffi-devel openssl-devel readline readline-devel gettext${endColor}"yum -y install wget gcc Python-devel libffi-devel openssl-devel readline readline-devel gettext# 顺便修复wget下载时进度条刷屏的BUGif [[ -f /usr/share/locale/zh_CN/LC_MESSAGES/wget.mo ]]then msgunfmt /usr/share/locale/zh_CN/LC_MESSAGES/wget.mo -o - | sed 's/eta(英国中部时间)/ETA/' | msgfmt - -o /tmp/zh_CN.mo mv /usr/share/locale/zh_CN/LC_MESSAGES/wget.mo /usr/share/locale/zh_CN/LC_MESSAGES/wget.mo.init cp /tmp/zh_CN.mo /usr/share/locale/zh_CN/LC_MESSAGES/wget.moelse msgunfmt /usr/share/locale/zh_CN/LC_MESSAGES/wget.mo.back -o - | sed 's/eta(英国中部时间)/ETA/' | msgfmt - -o /tmp/zh_CN.mo mv /usr/share/locale/zh_CN/LC_MESSAGES/wget.mo.back /usr/share/locale/zh_CN/LC_MESSAGES/wget.mo.back.init cp /tmp/zh_CN.mo /usr/share/locale/zh_CN/LC_MESSAGES/wget.mo.backfi# 下载函数function download(){ filename=$1 download_url=$2 md5str=$3 while [ 1 ] do # 判断python源码文件是否存在 if [[ -f ${filename} ]] then file_md5=`md5sum ${filename}|cut -d ' ' -f 1` if [[ "x${md5str}" == "x${file_md5}" ]] then echo -e "${green}本地【${filename}】文件正确,不用下载${endColor}" break else echo -e "${red}本地【${filename}】文件不完整,重新下载${endColor}" echo -e "${red}期望的md5值:${md5str}${endColor}" echo -e "${red}实际的md5值:${file_md5}${endColor}" rm -f ${filename} fi fi # 下载python echo -e "${yellow}开始下载【${filename}】源码${endColor}" echo -e "${yellow}wget --no-check-certificate ${download_url}${endColor}" wget --no-check-certificate ${download_url} # 判断下载的文件是否正确 if [[ -f ${filename} ]] then file_md5=`md5sum ${filename}|cut -d ' ' -f 1` if [[ "x${md5str}" == "x${file_md5}" ]] then echo -e "${green}【${filename}】md5校验成功,继续……${endColor}" break else echo -e "${red}【${filename}】md5校验失败,重新下载${endColor}" echo -e "${red}期望的md5值:${md5str}${endColor}" echo -e "${red}实际的md5值:${file_md5}${endColor}" rm -f ${filename} fi else echo -e "${red}【${filename}】下载失败,重新下载${endColor}" fi done}# 下载源码cd ~# download pythonpython_file='Python-2.7.13.tgz'python_md5='17add4bf0ad0ec2f08e0cae6d205c700'python_url='https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz#md5=17add4bf0ad0ec2f08e0cae6d205c700'download ${python_file} ${python_url} ${python_md5}# download setuptoolssetuptools_file='setuptools-12.0.3.tar.gz'setuptools_md5='f07e4b0f4c1c9368fcd980d888b29a65'setuptools_url='https://pypi.python.org/packages/source/s/setuptools/setuptools-12.0.3.tar.gz#md5=f07e4b0f4c1c9368fcd980d888b29a65'download ${setuptools_file} ${setuptools_url} ${setuptools_md5}# download pippip_file='pip-9.0.1.tar.gz'pip_md5='35f01da33009719497f01a4ba69d63c9'pip_url='https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9'download ${pip_file} ${pip_url} ${pip_md5}# 安装pythonecho -e "${yellow}安装python2.7.13到/usr/local/python2.7.13${endColor}"tar -zxvf Python-2.7.13.tgzcd Python-2.7.13# 编辑源码,去掉某些注释,否则后续安装setuptools与pip时会报错sed -i '166ireadline readline.c -lreadline -ltermcap' Modules/Setup.distsed -i '219iSSL=/usr/local/ssl' Modules/Setup.distsed -i '221i_ssl _ssl.c \\' Modules/Setup.distsed -i '223i-DUSE_SSL\ -I\$\(SSL\)\/include\ -I\$\(SSL\)\/include\/openssl\ \\' Modules/Setup.distsed -i '225i-L\$\(SSL\)\/lib\ -lssl\ -lcrypto' Modules/Setup.distsed -i '471izlib zlibmodule.c -I\$\(prefix\)/include -L\$\(exec_prefix\)/lib -lz' Modules/Setup.dist./configure --prefix=/usr/local/python2.7.13make && make install# 判断安装是否正确if [[ "$?" == "0" ]]then echo -e "${green}安装python2.7.13成功${endColor}"else echo -e "${red}安装python2.7.13失败${endColor}" echo -e "${red}请参考下面链接地址进行手动安装:${endColor}" echo 'http://blog.csdn.net/yu12377/article/details/72764324' exit 1fi# 备份及创建软链接today=`date +%s`echo -e "${green}备份原有yum到/usr/bin/yum.bak${today}${endColor}"cp /usr/bin/yum /usr/bin/yum.bak${today}echo -e "${green}更新/usr/bin/yum文件中调用的python版本为/usr/bin/python2.6${endColor}"sed -i '1i#!/usr/bin/python2.6' /usr/bin/yumsed -i '2d' /usr/bin/yumecho -e "${green}备份/usr/bin/python到/usr/bin/python.bak${today}${endColor}"mv /usr/bin/python /usr/bin/python.bak${today}echo -e "${green}软链接python2.7.13到/usr/bin/python${endColor}"ln -s /usr/local/python2.7.13/bin/python2.7 /usr/bin/pythonecho -e "${green}升级后python版本:${endColor}"python -V# 安装setuptoolsecho -e "${yellow}开始安装:setuptools-12.0.3${endColor}"cd ~tar -zxvf setuptools-12.0.3.tar.gzcd setuptools-12.0.3python setup.py install# 安装pipecho -e "${yellow}开始安装:pip-9.0.1${endColor}"cd ~tar -zxvf pip-9.0.1.tar.gzcd pip-9.0.1python setup.py installln -s /usr/local/python2.7.13/bin/pip /usr/bin/pipecho -e "${green}当前pip版本:${endColor}"pip -V
交流区
脚本中有一段未完成:判断当前版本是否已经是python2.7.13,如果是自动退出。因为在脚本中无法获取到python的当前版本。有解决的请在评论区告知我,谢了。
问题:https://www.zhihu.com/question/63480471
shell编程中父子进程消息传递问题?
为什么下面的命令执行后变量pip_version有值:
pip_version=`pip -V`echo ${pip_version}
而换成python命令变量version就没有值了:
version=`python -V`echo ${version}
弄明白上述问题,可能会解决一直困扰了我很久的问题:
jenkins job中调用shell脚本时,日志可以实时打印出来,但调用python脚本时,日志却不能实时打印,显示的时机不可控,有时一个任务跑的时间较长,想卡在某处,又看不到日志
阅读全文
1 0
- 将CentOS系统默认的python一键自动升级到最新的2.7.13版本
- 将CentOS系统默认的python手动升级最新到2.7.13版本
- centos 中如何将python更新到最新的版本
- 将CentOS 6.7默认的Python 2.6.6升级为2.7.4版本
- CentOS 6.3 64bit上升级系统默认Python 2.6.6到2.7.10版本
- ubuntu 将python从默认的2.7升级到3.*
- 将linux默认python升级到2.7.4版本
- 将linux默认python升级到2.7.4版本
- 将linux默认python升级到2.7.4版本
- CentOS python版本的升级 从2.6 到2.7
- centos将Python从2.6升级到2.7的方法
- 将升级目标对象更新到最新的版本1
- 将升级目标对象更新到最新的版本2
- CentOs如何将SVN、GIT升级到最新版本
- CentOS升级Python到3.3,系统仍然使用默认的2.6的解决办法
- ubuntu系统如何将firefox升级到最新版本
- ubuntu系统如何将firefox升级到最新版本
- 升级centos的python版本
- Shiro的注解(@RequiresRoles,@RequiresPermissions)授权不起作用
- 选择排序算法
- Struts2的自定义拦截器
- spfa的SLF 和 LLL优化算法
- 简单汽车管理系统
- 将CentOS系统默认的python一键自动升级到最新的2.7.13版本
- Java并发编程深入学习
- 使用Genymotion时,想用ADB遇到的问题
- STL中的迭代器
- 学生信息管理系统---SQL语句的中的符号有什么用(二)
- C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新)
- Java 8 中 Date与LocalDateTime、LocalDate、LocalTime互转
- hud 6038 Function
- stm32的外设初始化步骤,以定时器为例。