YUM报错No module named yum处理

news/2025/2/10 8:41:05/

一、问题描述

在这里插入图片描述

某次GreenPlum集群部署过程中,现场人员反馈,yum命令无法使用了,执行报错:No module named yum,如下所示:

在这里插入图片描述
相关资料:YUM

二、问题分析处理

2.1 YUM的本质

yum命令本质上是属于python的一个模块,打开/usr/bin/yum,会发现第一行命令#!/usr/bin/python,即它执行器/解析器是python,并且导入了yum模块。而python有一个非常重要的lib库文件,默认在**/usr/lib64**目录下,全名叫 libpython2.7.so.1.0(对应python2.7),python每次执行首先会调用该lib库,python与lib库是一一对应关系。 正常yum是通过系统自带的python使用的,也就是它需要调用OS自带的python的lib库,yum调用python使用的是绝对路径,它强依赖此python,当yum命令找不到原先它调用的库文件时,就会报如上错误信息,所以我们要做的就是让yum继续能调用原来的python以及原来python的lib库。
在这里插入图片描述

现场GPDB部署后,它自身带了python的2.7和3.4版本和相应库文件,一旦配置了全局环境变量,必然修改了python库或执行文件路径,导致yum调用失败报错。现场检查环境变量PYYHONHOME也可知;
在这里插入图片描述
在这里插入图片描述
针对上述问题,注释环境变量配置,注销后重新打开即可

2.2、升级python或使用高版本注意

可惜并未找到相关资料说明,yum有配置lib库文件路径的地方,它还是在默认路径中查找lib库文件;那么,当我们升级完python后,lib库文件更新,我们就需要给yum配置额外的lib库文件路径或将旧的库文件添加到新的库文件中,配置方法如下:

1)新增配置lib库路径,通过配置LD_LIBRARY_PATH全局环境变量来实现

LD_LIBRARY_PATH是用来指定查找共享库(动态链接库)时除了默认路径(/lib and /usr/lib)之外的其他路径。我们可将新的库文件目录设置到LD_LIBRARY_PATH中来让系统找到;

vim /etc/bashrc  #或/etc/profile
export LD_LIBRARY_PATH=/usr/local/python2.7.15/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/python2.7.15/bin:$PATH#或
cp /usr/lib64/libpython2.7.so.1.0.bak /usr/local/python2.7.5/lib/libpython2.7.so.1.0
mv /usr/bin/yum /usr/bin/yum-exec #重命名#新建/usr/bin/yum文件,内容如下: 
#$@和$*都表示命令行所有的参数(不包含$0),但是$*将命令行所有的参数看成一个整体,而$@则区分各个参数
#!/bin/bash
export LD_LIBRARY_PATH=/usr/local/python2.7.5/lib/
/usr/bin/yum-exec $*#添加可执行权限:
chmod +x /usr/bin/yum
#检查yum是否已经可用
yum list installed
yum --version

知识回顾:

1、$#:表示执行脚本传入参数的个数

2、$*:表示执行脚本传入参数的列表(不包括$0)

3、$$:表示进程的id;Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)

4、$!:Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)

5、$@:表示获取执行脚本传入的所有参数

6、$0:表示执行的脚本名称

7、$1:表示第一个参数

9、$?:表示脚本执行的状态,0表示正常,其他表示错误

2)替换文件(推荐)

# 备份原来的lib库文件
mv /usr/lib64/libpython2.7.so.1.0 /usr/lib64/libpython2.7.so.1.0.bak
# 将python的bin目录加入到PATH中
echo 'export PATH=/usr/local/python2.7.15/bin:$PATH' >> /etc/profile
# 将新的lib库文件拷贝至/usr/lib64下
cp /usr/local/python2.7.15/lib/libpython2.7.so.1.0 /usr/lib64/
source /etc/profile

三、附录

3.1、 LIBRARY_PATH 和 LD_LIBRARY_PATH

LIBRARY_PATH is used by gcc before compilation to search for directories containing libraries that need to be linked to your program.程序编译期间查找动态链接库时指定查找共享库的路径

LD_LIBRARY_PATH is used by your program to search for directories containing the libraries after it has been successfully compiled and linked.程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径


http://www.ppmy.cn/news/280671.html

相关文章

接口测试 —— 接口测试的意义

1、接口测试的意义(优势) (1)更早的发现问题: 不少的测试资料中强调,测试应该更早的介入到项目开发中,因为越早的发现bug,修复的成本越低。 然而功能测试必须要等到系统提供可测试…

Docker超详细基础使用(带图)

目录 安装ubuntu 基本使用命令 docker run 容器名 延伸命令 启动ubuntu 查看所有正在运行的容器 指定容器别名启动 doker ps 延伸命令 退出容器 重新进入正在运行的容器 启动容器 删除已停止的容器 强制删除容器 查看容器日志 查看容器内部运行的进程 ​编辑 查看容…

[游戏代码] L4D求生之路部分代码用法

获取开火的武器代码 public Action Event_WeaponFire(Event event, const char[] name, bool dontBroadcast) {char sWeapon[32];GetEdictClassname(GetPlayerWeaponSlot(client, 0), sWeapon, 32);PrintToChatAll("武器代码:%s ,sWeapon); }

[游戏代码]求生之路:ent_fire用法

ent_fire <classname or targetname> <input name> <optional parameter> <optional delay> <classname or targetname> !self //只对自己工作 !picker //通过瞄准选择的玩家 player //该服务器上的所有玩家地图事件调用方法: 例子解释(地图编辑…

[游戏代码]求生之路插件:人物获得武器

#include <sourcemod> #include <sdktools> #pragma semicolon 1public Plugin:myinfo {name "[紫冰] 武器给予",author "紫冰",description "输入指令获得武器",version "1.0",url "https://blog.csdn.net/Z…

求生之路2升级补丁及完整版下载

各低版本升级包&#xff1a;&#xff08;按自己版本情况选择下载&#xff09; 资源免责申明&#xff1a;本人提供的所有资源&#xff0c;均为互联网收集转载&#xff01;请在下载24小时内删除&#xff01;为尊重版权&#xff0c;谢谢&#xff01; 各低版本升级包&#xff1a;&a…

求生之路2linux服务器,《求生之路2》正式开放Linux版

开发商Valve已经完成了在Linux系统上的完成了对Steampipe系统的支持和EMS系统(传说中很牛叉的进阶突变系统&#xff0c;存在于突变模式中)的研发与测试。 所谓的Steampipe系统&#xff0c;就是能给予开发者在内容存储服务器上的编码分支和管理测试访问权的灵活性。以及代码也变…

[教程] 求生之路联机方法

生之路联机才是该游戏的乐趣所在&#xff0c;联机请检查双方 游戏版本 是否一致&#xff0c;不同版本 无法联机 。 求生之路ip直连方法&#xff1a; 1.使用MAP命令建立主机&#xff0c;单人战役模式建立的游戏 无法联机 。 PS&#xff1a;路由器用户建主需开启端口映射 按…