【解决方法】CentOS7 报错 ModuleNotFoundError: No module named 'gi'

本文解决了一个关于CentOS 7.6环境中防火墙命令因Python版本升级而导致的问题。作者在将Python从2.7.5升级到3.7.0后,发现firewall-cmd无法正常工作,通过修改脚本的执行环境为Python2,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

新装的 CentOS7.6 环境,准备做一个测试机,因为是内网做着玩的,装完第一件事就是把防火墙关了,然后安装了其他的开发环境。

问题

今天想打开防火墙测试一个功能的时候,发现报了这样一个错:

[root@localhost ~]# firewall-cmd --state
Traceback (most recent call last):
  File "/usr/bin/firewall-cmd", line 24, in <module>
    from gi.repository import GObject
ModuleNotFoundError: No module named 'gi'

我就是想查一下防火墙现在的状态,未果。

问题分析

命令行已经提示出来了,是 /usr/bin/firewall-cmd 这个文件出了问题,而这个文件本身我并没有动过,所以基本可以肯定,是环境的问题。

打开 /usr/bin/firewall-cmd 文件看一眼:

[root@localhost ~]# vim /usr/bin/firewall-cmd

文件内容截取如下:

#!/usr/bin/python -Es
# -*- coding: utf-8 -*-
#
# Copyright (C) 2009-2016 Red Hat, Inc.
#
# Authors:
# Thomas Woerner <twoerner@redhat.com>
# Jiri Popelka <jpopelka@redhat.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

from gi.repository import GObject
import sys
sys.modules['gobject'] = GObject
...

可以看到第一行写的执行脚本使用的命令。

灵光一闪。

我把 CentOS7.6 默认自带的 Python 2.7.5 升级成了 Python 3.7.0,而上面的 /usr/bin/firewall-cmd 脚本需要由 python2 来执行。

问题分析出来了,那就开始解决。

解决方法

修改 /usr/bin/firewall-cmd 文件的第一行,使用 python2 来执行。

针对我这里,就是把第一行修改成了下面这样:

#!/usr/bin/python2 -Es

解决。

拓展

其实解决问题的方法挺简单的,但啰啰嗦嗦说了一大堆,主要是想引出这部分的扩展。

如果你的服务器上,某些系统级的指令突然没办法执行了,八成就是环境变了导致的。

比如:

CentOS7 中升级了 python2python3 之后,yum 指令就不好用了,需要修改以下几个文件:

/usr/bin/yum
/usr/bin/yum-config-manager

修改方式和上面一样,改一下对应文件的第一行。

所以,这篇文章的重点不是解决问题,而是解决问题的思路,以及由这个问题展开的其他类似问题的解决方法。

与大家共勉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值