yum&python版本问题解决

Python011

yum&python版本问题解决,第1张

项目原因,需要对一台机器做kerberos授权。

使用yum安装kerberos过程中,遇到一些问题:

安装yum的python module之后,使用yum安装软件,仍然有版本问题

rpm是啥: 本意是Red-Hat Package Manager,但是其他Linux版本也支持,可以看成通用的Linux软件包管理的工具。

yum又是啥:Yellow dog Updater, Modified的缩写(不能见名知意),一顿百度之后,我简单理解成,yum是python实现的,基于rpm的一个易用封装(屏蔽了rpm的软件包依赖等细节)

所以回过头来分析遇到的问题:

yum不可用,是一个python问题;

而yum可用,yum安装报版本的错误,其实是通过yum/rpm安装的软件有版本问题;

通过和正常机器的比对,发现本台机器的python2.6,是野路子安装的,不是通过rpm安装。yum安装软件,找不到使用rpm安装的python,于是就有missing requires of python的问题。所以,通过rpm装一个python2.6,理论上就通了。

不过安装过程中,访问正常的rpm仓库( http://mirrors.ustc.edu.cn/centos/6/os/x86_64/Packages 等),看到的python-2.6.6.rpm包,版本都是python-2.6.6-66.el6_8.x86_64,适合centos6.8以上,理由是其他版本的centos软件包不维护升级,有安全风险。而我们的服务器是centos6.3,不能使用这个包。

收获有二:

任何时候,定位问题最快的方式,还是拿完美环境和问题环境,做对比,找diff,diff的点,往往就是问题点。程序员的控制变量法,颠扑不破。

得搞懂各种概念,之前对rpm、yum只是大概了解,通过这次定位解决问题,有了更深入的了解。

纯傻瓜式步骤,保证成功。

下面的操作,按照步骤来就可以了,不要在中途cd 到别的文件目录下,要想查看效果可以用 ls加上对应的目录,不需要切换进去。

首先不管你当前在哪个目录下,输入以下命令。

默认Centos7中是有python安装的,但是是2.7版本,我们需要安装py3。我们去看一下默认的py2.7在哪里。

三个显示结果中最后一个是python2.7,实际上这几个文件之间是有依赖关系的。在ls 后面加个 -al参数,如下:

[root@localhost bin]# ls -al python*

lrwxrwxrwx. 1 root root 33 Oct 21 12:30 python ->python2

lrwxrwxrwx. 1 root root 9 Oct 19 23:55 python2 ->python2.7

-rwxr-xr-x. 1 root root 7136 Aug 4 08:40 python2.7

[root@localhost bin]#

依赖关系很明显就可以看到。我们要安装版本3,首先要把刚才显示的三个python文件中的第一个python给备份一下(不保留源文件,仅保留备份文件就可以)

使用如下命令:

python文件变成了python.bak文件,bak文件就放这里吧,再也不用管它了。避免以后麻烦,就留在这里不用删除。系统准备好了,接下来,我们要去下载了。

比较推荐下面这种方式,我们在linux上找一个目录,然后使用wget命令下载到这个目录,然后解压->安装。如下:

https://www.python.org/ftp/python/ 这个是所有的python版本存放的地方。我们想使用哪个版本就用哪个。

很多版本,这里选择的是比较新的3.6.3,点进去,找到下面这个文件。Python-3.6.3.tgz

然后根据地址栏的链接拼接成如下链接:(如果是其他版本道理与这个是一样的)

https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz

链接准备好了,我们在Centos 7上创建一个目录吧。一般选择的是/usr/local里面的,如下命令(当前我们依然还在之前的/usr/bin目录下面,先不要动,还在这里):

目录创建好了,我们就cd切换进去就好了。

接下来我们要用刚才的网址,把源码下载到这个目录下就OK,命令如下:

等待下载完成之后会在当前目录下出现一个tgz包,命令解压这个包到当前目录就可以:

就要开始安装了,因为下载的包是未编译的,我们需要编译一下。

进入文件目录:

然后如下命令(执行完这句命令之后,不要切换到别的目录,不然会非常懵逼,因为执行完之后如果去/usr/local/下面的看的话是没有python3Dir目录的):

稍微解释上面这句命令,这句话的大致目的就是把python的安装目录指定一下,这样的话,里面的一些bin目录、lib目录就都会存放在这个目录下面。如果不指定这个安装目录的话,最后python的安装文件将分散到linux的默认目录,不在一块。我们指定安装目录,以后卸载的话直接删除目录就可以干净卸载了。

现在我们当前目录还是在/usr/local/python3/Python-3.6.3,执行如下命令:

然后出来一大堆代码,等它执行完毕。接着输入以下命令:

又是一大堆代码,执行完毕之后,我们就可以切换到/usr/local/python3Dir目录下去查看了。

接下来我们还有一点善后工作。切换到 /usr/bin目录下面吧:

软链接创建完毕之后。再说个事情,就是centos的yum命令是需要python支持的,我们贸然把当期的版本更换了,万一yum出错怎么办,还是让yum依然用原来的2.7版本吧。好吧我们帮它改一下吧:

注意:下面这个操作用vi操作,不熟悉vi的同学一定要按照我的指示来 ,不然你一脸懵逼连修改后的文件怎么保存退出都不知道。

首先输入命令,然后回车:

接下来出现一个全新的界面。此时任何按键都不要动。听我指示。

首先,切换到 英文 输入法,再输入字符 i 是aeiou的i

然后就可以开始编辑这个文件了。

把文件开头第一行的

#!/usr/bin/python改成#!/usr/bin/python2.7 这样就可以了。

然后,下面保存退出。注意步骤。

首先按下ESC,然后 输入: 这个符号(需要shift组合键的)。然后输入wq 细心的同学看左下角。

然后回车就可以保存退出,回到终端界面了。

我们查看一下链接情况:

然后查看一下当前的python版本

然后来个hello world测试一下:

先输入python进入,然后写代码:

以上就是安装的全部过程,现在来捋一下安装的大致思路。

升级python版本后,运行yum

# yum -y install openssl

提示如下:

There was a problem importing one of the Python modules

required to run yum. The error leading to this problem was:

No module named yum

Please install a package which provides this module, or

verify that the module is installed correctly.

It's possible that the above module doesn't match the

current version of Python, which is:

2.7.3 (default, Jul 15 2014, 16:52:36)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)]

If you cannot solve this problem yourself, please go to

the yum faq at:

http://wiki.linux.duke.edu/YumFaq

分析应该是yum和Python是依赖关系,yum是python的模块,所以需要修改yum来解决:

1. 查看python的安装路径

# python

Python 2.7.3 (default, Jul 15 2014, 16:52:36)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>>

# whereis python

python: /usr/bin/python2.4 /usr/bin/python /usr/bin/python2.6 /usr/lib/python2.4 /usr/local/bin/python

/usr/local/bin/python2.6-config /usr/local/bin/python3.3-config /usr/local/bin/python3.3 /usr/local/bin/python3.3m

/usr/local/bin/python3.3m-config /usr/local/bin/python2.6 /usr/local/lib/python2.4 /usr/local/lib/python3.3

/usr/local/lib/python2.6 /usr/include/python2.4 /usr/share/man/man1/python.1.gz

2. 修改yum

# vim /usr/bin/yum

将 #!/usr/bin/python 改成 #!/usr/bin/python2.4

【保存并退出】

3. 再测试yum安装,成功;