如何修改 CentOS 6.x 上默认Python

贾兰
• 阅读 1089

最近在工作中遇到一个问题,就是有一个功能希望在各种服务器上实现,而服务器上的系统版本可能都不一样,有的是 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。

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

  1. 首先确认下你机器上的默认的 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
  1. 由于我们将使用编译安装的方式,所以要安装下 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。

  1. 下载最新的 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
  1. 配置,编译,安装
# --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。

  1. 查看系统的 Python 版本
$ python -V
Python 2.6.6

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

  1. 修改系统默认的 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
  1. 重新指定 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
  1. 安装 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

参考文章

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Karen110 Karen110
4年前
手把手教你如何在Ubuntu下安装Miniconda
前言这次我们来安排一下如何在ubuntu上安装Miniconda。这里说一下为什么不是Anaconda,因为它太占内存了,足足有5G左右,我的云服务器才40G硬盘,实在是玩不起呐。但是Anaconda和Miniconda的用法完全一摸一样,使用上不要担心,完全就是一个多装了很多包,一个少装了很多包。解释一下为什么用conda来创建python环境现在基于
Stella981 Stella981
3年前
Hadoop streaming使用自定义python版本和第三方库
在使用Hadoop的过程中,遇到了自带python版本比较老的问题.下面以python3.7为例,演示如何在hadoop上使用自定义的python版本以及第三方库.1.在https://www.python.org下载Python3.7.2.gz包2.在linux环境下:tarxvfPthon3.7.2解压文件
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
ubuntu16.04LTS服务器,python2.7升级到3.6,且同时升级pip
ubuntu这个服务器,默认是带了python2.7和python3.5版本的。如果想升级到python3.6,怎么办?我综合了网上的几个帖子,在几台服务器上测试了一下,没什么大问题,作个记录。一,让下面的addaptrepository命令可用aptinstallsoftwarepropertiescommon二
Wesley13 Wesley13
3年前
DPDK
背景最近在做将基于dpdk16.11.1开发的程序,转移到基于dpdk18.11版本下开发。遇到了网卡RSS配置的问题,在这里纪录一下。问题dpdk16.11.1在dpdk16.11.1上的程序如下:staticuint8_trss_intel_key40{0x6D,
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
JOptionPane修改图标
1.在Linux平台下.JOptionPane会显示Java默认的图标,在window平台不显示图标,如何替换这个图标了?2JOptionPane.setIcon(Icon)修改的是内容区域的icon,而不是左上角的Icon.所以需要通过修改Jdialog/Frame的图标来达到修改默认图标的问题.3.代码:if(JOptio
Stella981 Stella981
3年前
Python并发(二)
并发是指一次处理多件事,而并行是指一次做多件事。二者不同,但互相有联系。打个比方:像Python的多线程,就是并发,因为Python的解释器GIL是线程不安全的,一次只允许执行一个线程的Python字节码,我们在使用多线程时,看上去像很多个任务同时进行,但实际上但一个线程在执行的时候,其他线程是处于休眠状态的。而在多CPU的服务器上,Java或Go的多线程,
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这