centos7下执行firewall-cmd显示ImportError: No module named 'gi'

在执行firewall-cmd命令时出现如下问题
系统:centos7, python3.5

错误:

[root@localhost laoyilun]# firewall-cmd
Traceback (most recent call last):
File "/usr/bin/firewall-cmd", line 24, in <module>

from gi.repository import GObject

ImportError: No module named 'gi'

试着用网上的方法 yum install python3-gi, 显示没有可用的python3-gi包
如下:

[root@localhost laoyilun]# yum install python3-gi

已加载插件:fastestmirror, langpacks
base | 3.6 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
(1/4): base/7/x86_64/group_gz | 155 kB 00:00
(2/4): extras/7/x86_64/primary_db | 191 kB 00:00
(3/4): base/7/x86_64/primary_db | 5.6 MB 00:03
(4/4): updates/7/x86_64/primary_db | 7.8 MB 00:04
Determining fastest mirrors

  • base: mirrors.hust.edu.cn
  • extras: mirrors.hust.edu.cn
  • updates: centos.ustc.edu.cn
    没有可用软件包 python3-gi。

错误:无须任何处理

阅读 17.8k
3 个回答

出现这个问题是,更新了Python版本(version>=Python3),cnetos7系统自带的是Python2.7。

在安装python时,一般教程都会提示说,安装成功后,yum不能用,需要修改yum配置文件(vim /usr/bin/yum)。 把文件头部的#!/usr/bin/python改成#!/usr/bin/python2.7
那么这个方法,继续可以在这个问题上使用: 
第一步,vim /usr/bin/firewall-cmd, 将#!/usr/bin/python -Es 改为 #!/usr/bin/python2.7 -Es(到目前为止,上面提到的问题已解决)
第二步,vim /usr/sbin/firewalld,  将#!/usr/bin/python -Es 改为 #!/usr/bin/python2.7 -Es (这一步是针对于防火墙报错,进行的修改)

试下这个:

sudo -H pip uninstall gi  //**remove the package with pip**
sudo apt-get install --reinstall python-gi   //**reinstall it with apt-get**

centos7下

如果升级python3,不推荐修改系统自带的python2,很多比如yum运行都基于python2,firewall-cmd 防火墙出现问题和python有关,好像和glib有关,glib更底层,需要升级的包还是很多的,最好不要动默认的python2。

推荐以下做法,即可共存:

yum install python-devel zlib-devel bzip2-devel openssl-devel ncurese-devel
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
tar xvf Python-3.6.2.tgz
cd Python-3.6.2
./configure --prefix=/usr/local
make
make altinstall

ln -s /usr/local/bin/python3.6 /usr/bin/python3
ln -s /usr/local/bin/pip3.6 /usr/bin/pip3

python3 -V

python -m pip -V
python3 -m pip -V

pip -V
pip3 -V
推荐问题