修改 CentOS 6.x 上默认Python的方法


Posted in Python onSeptember 06, 2019

最近在工作中遇到一个问题,就是有一个功能希望在各种服务器上实现,而服务器上的系统版本可能都不一样,有的是 CentOS 6.x,有的是 CentOS 7.x 。

需要说明的一点是,CentOS 6.x 上的 Python 版本是 2.6.x 的,而 CentOS 7.x 上的 Python 版本是 2.7.x 的,这意味着我要实现的功能要适配这两种版本的系统。

你可能会说,这有什么的,自己写的时候,注意一下就好了。

事情其实没有那么容易,我要实现的功能是基于一个框架进行定制,需要修改不少的框架代码。这个框架在不同的 Linux 版本上,是有不同的版本的,而且差异巨大,曾经想过在 CentOS 6.x 和 CentOS 7.x 将这个框架安装成同一个版本,最后还是失败了,无法安装,原因就是高版本需要 Python2.7,而 CentOS 6.x 上只有 Python2.6。

这个历史问题一直遗留到现在,由于这次的功能影响到的代码较多,如果要对两个版本的框架分别进行定制的话,需要花不少的时间,为了不维护两套版本,避免浪费多余的精力去做适配,我决定将 CentOS 6.x 上默认的 Python2.6 升级成 Python2.7。

下面是整个升级过程,别看步骤简单,这些精简步骤的背后可是有不少的坑,被我踩过后,你可以直接使用了。

首先确认下你机器上的默认的 Python 版本

$ python -V
Python 2.6.6

$ whereis python
python: /usr/bin/python /usr/bin/python2.6 /usr/lib/python2.6 /usr/lib64/python2.6 /usr/local/bin/python /usr/include/python2.6 /usr/share/man/man1/python.1.gz

由于我们将使用编译安装的方式,所以要安装下 gcc,及一些工具包。

注意一定要全部安装,不然后面会发现有不少 python 的工具用不了。

比如不安装 zlib 会无法安装 setuptools,不装 openssl 和 openssl-devel,会无法使用 pip 工具等

$ yum install gcc -y
$ yum groupinstall "Development tools"
$ yum install zlib-devel bzip2-devel openssl openssl-devel ncurses-devel sqlite-devel -y

如果你这里未按照我的步骤来安装,你后面使用的时候出现了各种各样的问题,不要慌,只要再回来这里,把没安装的包装上,安装完成后,你需要进入第四步重新编译安装Python。

下载最新的 Python2.7.x 安装包,解压并进入指定目录

$ wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz
$ tar zxvf Python-2.7.14.tgz
$ cd Python-2.7.14

配置,编译,安装

# --prefix 指定 python 安装的路径
$ ./configure --prefix=/usr/local/python/python2.7
$ make
$ make install

./configure 命令执行完毕之后创建一个文件creating Makefile,供下面的make命令使用 执行 make install 之后就会把程序安装到我们指定的目录中去。

Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure ?help输出详细的选项列表。其中 --prefix 选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在 /usr/local/lib ,配置文件默认放在 /usr/local/etc ,其它的资源文件放在 /usr /local/share 。如果配置 --prefix ,如: ./configure --prefix=/usr/local/test 可以把所有资源文件放在/usr/local/test的路径中,不会杂乱。

用了 --prefix 选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。当然要卸载程序,也可以在原来的make目录下用一次 make uninstall ,但前提是make文件指定过uninstall。

查看系统的 Python 版本

$ python -V
Python 2.6.6

如果你查看还是 Python 2.6.6 版本,请继续看第六步。

修改系统默认的 Python 版本

查看新安装的Python版本,当前系统的Python版本,并将系统指向的Python从2.6.x修改为2.7.x,再次查看当前系统的Python版本,已经变更为2.7.x

# 这是我们刚安装的 Python
$/usr/local/bin/python2.7 -V
Python 2.7.14

# 这是系统默认 Python
$ /usr/bin/python -V 
Python 2.6.6

# 备份原来的 Python 文件
$ mv /usr/bin/python /usr/bin/python.bak

# 建立软链接,将我们刚安装的 python2.7 做为系统默认版本
ln -s /usr/local/bin/python2.7 /usr/bin/python

# 再次查看 Python 版本,已经成功切换过来
$ python -V
Python 2.7.14

重新指定 yum 的Python版本

上面我们改了系统的默认 Python 版本,由于CentOS 6.x 的 yum 是基于Python2.6 的,为了不影响 yum 的使用,需单独将yum指向python2.6版本。

编辑: vim /usr/bin/yum ,将 /usr/bin/python 改成 /usr/bin/python2.6

#!/usr/bin/python2.6

安装 setuptools 及 pip

pip是python的安装工具,很多python的常用工具,都可以通过pip进行安装。要安装pip,首先要安装setuptools。从这个链接,你可以得到相关信息: https://pypi.python.org/pypi/...

# 下载 setuptools
$ wget https://pypi.python.org/packages/ff/d4/209f4939c49e31f5524fa0027bf1c8ec3107abaf7c61fdaad704a648c281/setuptools-21.0.0.tar.gz#md5=81964fdb89534118707742e6d1a1ddb4

同样的,进行安装:

$ tar vxf setuptools-21.0.0.tar.gz 
$ cd setuptools-21.0.0
$ python setup.py install

安装完成后,下载pip。其信息在如下网站: https://pypi.python.org/pypi/pip

# 下载 pip
wget https://pypi.python.org/packages/41/27/9a8d24e1b55bd8c85e4d022da2922cb206f183e2d18fee4e320c9547e751/pip-8.1.1.tar.gz#md5=6b86f11841e89c8241d689956ba99ed7

同样的,进行安装

$ tar vxf pip-8.1.1.tar.gz 
$ cd pip-8.1.1
$ python setup.py install

安装完成后,执行 pip list 查看一下安装的包,若无异常,则一切顺利。或者你也可以试着安装一下第三方包 pip install requests

总结

以上所述是小编给大家介绍的修改 CentOS 6.x 上默认Python的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
使用python搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
Python模拟三级菜单效果
Sep 11 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
Jan 08 Python
Python二叉树定义与遍历方法实例分析
May 25 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
python实现网站微信登录的示例代码
Sep 18 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 Python
Tensorflow中的降维函数tf.reduce_*使用总结
Apr 20 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 Python
Python爬虫之Selenium实现窗口截图
Dec 04 Python
Python超详细分步解析随机漫步
Mar 17 Python
Python代理IP爬虫的新手使用教程
Sep 05 #Python
关于Python内存分配时的小秘密分享
Sep 05 #Python
python global关键字的用法详解
Sep 05 #Python
python requests证书问题解决
Sep 05 #Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 #Python
Python图像处理模块ndimage用法实例分析
Sep 05 #Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 #Python
You might like
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
详解Python中的条件判断语句
2015/05/14 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
python把1变成01的步骤总结
2019/02/27 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
护士辞职信范文
2014/01/19 职场文书
小学老师寄语大全
2014/04/04 职场文书
股东授权委托书
2014/10/15 职场文书
租赁协议书
2015/01/27 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python