无法导入名称“_gi”

Cannot import name '_gi'

我正在尝试使用 add-apt-repository 命令向 ppa 添加存储库,但未找到来自 Python 的 _gi 模块。

我执行了这个命令:sudo add-apt-repository ppa:s-mankowski/ppa-kf5

这是回溯:

Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 11, in <module>
    from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
  File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 67, in <module>
    from gi.repository import Gio
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
    from . import _gi
ImportError: cannot import name '_gi' from 'gi' (/usr/lib/python3/dist-packages/gi/__init__.py)

我在 Ubuntu 上使用 Python3.7,我尝试了很多解决方案,但它不起作用:

$ cd /usr/lib/python3/dist-packages
$ sudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.so

$ cd /usr/lib/python3/dist-packages/gi
$ sudo ln -s _gi.cpython-{36m,37m}-x86_64-linux-gnu.so

我不能使用 sudo add-apt-repository ppa:s-mankowski/ppa-kf5 命令,但是 运行 一个带有 python3 {file} 的 Python 文件可以工作。

感谢您的帮助!

Ubuntu 不喜欢将其默认解释器从 python 3.7.

切换开

所以使用

将其切换回 3.6
sudo update-alternatives --config python3

之后尝试安装 gi 包:

sudo apt install python3-gi

感谢,我发现解决方案是:

sudo ln -s /usr/lib/python3/dist-packages/gi/_gi.cpython-{36m,37m}-x86_64-linux-gnu.so

这对我在 Ubuntu 上使用 Python 3.7 很有效。

按照以下步骤解决问题。

(1) ls -al /usr/bin | grep python

(2) sudo gedit /usr/bin/add-apt-repository

然后把!/usr/bin/python3改成

!/usr/bin/python3.6

这 2 个步骤可能对您有所帮助

$ cd /usr/lib/python3/dist-packages/gi
$ sudo ln -s _gi.cpython-{36m,37m}-x86_64-linux-gnu.so

这是一个老问题,但如果有人需要快速解决方案,那并不意味着要更改任何地方的默认 Python 版本,只需:

sudo python3.6 /usr/bin/apt-add-repository ppa:mosquitto-dev/mosquitto-ppa

当你检查 sudo apt install python3-gi 时它说“它已经安装到最新版本” 但是你的 import gi 不工作,所以你应该检查它的目录

cd /usr/lib/python3/dist-packages/gi

你会看到我用的是哪个版本的 python:“_gi.cpython-38-x86_64-linux-gnu.so” 即 38 => python3.8 所以你应该检查 sudo update-alternatives --config python3 看看是否有 python3.8 指向或没有,如果没有就简单地做:

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2

并确保您的 python3 指向 python3.8 您可以通过以下方式查看:ls -l /etc/alternatives/python3 完成。