繁体   English   中英

ImportError:无法从部分初始化的模块“gi”导入名称“_gi”(很可能是由于循环导入)

[英]ImportError: cannot import name '_gi' from partially initialized module 'gi' (most likely due to a circular import)

当我想切换到 python 3.8 时,看起来我已经破坏了我的 python 安装。 使用 Ubuntu 18.04。 尝试使用gi ,出现以下错误:

$ python
Python 3.8.1 (default, Dec 31 2019, 18:42:42) 
[GCC 7.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
 >>> from gi.repository import GLib, Gio
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
    from . import _gi
ImportError: cannot import name '_gi' from partially initialized module 'gi' (most likely due to a circular import) (/usr/lib/python3/dist-packages/gi/__init__.py)

尝试为 python 运行 update-alternatives,但它告诉我只有一个 python 替代配置 (3.8)。

试图重新安装 python3-gi 和 python3.8。 还是一样的问题

当我想切换到 python 3.8 时,我似乎破坏了我的 python 安装。 使用 Ubuntu 18.04。 尝试使用gi ,会出现以下错误:

$ python
Python 3.8.1 (default, Dec 31 2019, 18:42:42) 
[GCC 7.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
 >>> from gi.repository import GLib, Gio
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
    from . import _gi
ImportError: cannot import name '_gi' from partially initialized module 'gi' (most likely due to a circular import) (/usr/lib/python3/dist-packages/gi/__init__.py)

尝试为 python 运行 update-alternatives,但它告诉我只配置了一个 python 替代方案 (3.8)。

尝试重新安装 python3-gi 和 python3.8。 还是一样的问题

当我想切换到 python 3.8 时,我似乎破坏了我的 python 安装。 使用 Ubuntu 18.04。 尝试使用gi ,会出现以下错误:

$ python
Python 3.8.1 (default, Dec 31 2019, 18:42:42) 
[GCC 7.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
 >>> from gi.repository import GLib, Gio
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
    from . import _gi
ImportError: cannot import name '_gi' from partially initialized module 'gi' (most likely due to a circular import) (/usr/lib/python3/dist-packages/gi/__init__.py)

尝试为 python 运行 update-alternatives,但它告诉我只配置了一个 python 替代方案 (3.8)。

尝试重新安装 python3-gi 和 python3.8。 还是一样的问题

我在 ubuntu 18 上遇到了同样的问题,因为 python3 指的是 python3.9。 为了解决它,我改变了python3的替代方案:

sudo update-alternatives --config python3                                                                                                                                                                  
There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.9   2         auto mode
  1            /usr/bin/python3.6   1         manual mode
  2            /usr/bin/python3.9   2         manual mode

通过选择数字 1,现在 python3 指向 python3.6 并且一切正常

在这里找到答案https://bugzilla.redhat.com/show_bug.cgi?id=1709787

原因是 - /usr/lib64/python3.8/site-packages/gi/_gi.cpython-38m-x86_64-linux-gnu.so 的名称不正确:

文件“”,1号线,在文件“/usr/lib64/python3.8/site-packages/gi/ INIT:SH-5.0#python3 '从gi.repository进口GLib的'回溯(最近通话最后一个)-c。 py”,第 42 行,来自 . 进口_gi导入错误:无法导入的名字从'GI' _gi“(/usr/lib64/python3.8/site-packages/gi/初始化的.py)SH-5.0#MV /usr/lib64/python3.8/site-包/gi/_gi.cpython-38m-x86_64-linux-gnu.so /usr/lib64/python3.8/site-packages/gi/_gi.cpython-38-x86_64-linux-gnu.so sh-5.0# python3 -c '从 gi.repository 导入 GLib'

请注意,从 3.8.0a4 开始,“m”不应该在那里。 它以某种方式硬编码吗?

sh-5.0# python3-config --extension-suffix .cpython-38-x86_64-linux-gnu.so

就我而言,它是

$ sudo ln -s /usr/lib/python3/dist-packages/gi/_gi.cpython-35m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/gi/_gi.cpython-38-x86_64-linux-gnu.so
$ sudo ln -s /usr/lib/python3/dist-packages/gi/_gi_cairo.cpython-35m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/gi/_gi_cairo.cpython-38-x86_64-linux-gnu.so

对我来说,解决方法是创建一个符号链接:

cd /usr/lib/python3/dist-packages/gi/
sudo ln -s _gi.so _gi.cpython-38-x86_64-linux-gnu.so

它为我解决了这个问题。

这个错误的原因是这个应用找不到匹配的Python版本_gi_cairo.cpython-(version)-x86_64-linux-gnu.so.
通常,这种不匹配的情况是由于不同版本的 Python 的一些错误混合使用造成的。

所以基本上,你可以尝试切换你的 Python 版本(到你的操作系统的默认版本)。 或者你可以去 '/usr/lib/python3/dist-packages/gi' 并创建一个新的 .so 库文件:
cp _gi_cairo.cpython-(old version)-x86_64-linux-gnu.so _gi_cairo.cpython-(new version)-x86_64-linux-gnu.so
或者
ln -s _gi_cairo.cpython-(old version)-x86_64-linux-gnu.so _gi.so

当我想切换到 python 3.8 时,我似乎破坏了我的 python 安装。 使用 Ubuntu 18.04。 尝试使用gi ,会出现以下错误:

$ python
Python 3.8.1 (default, Dec 31 2019, 18:42:42) 
[GCC 7.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
 >>> from gi.repository import GLib, Gio
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
    from . import _gi
ImportError: cannot import name '_gi' from partially initialized module 'gi' (most likely due to a circular import) (/usr/lib/python3/dist-packages/gi/__init__.py)

尝试为 python 运行 update-alternatives,但它告诉我只配置了一个 python 替代方案 (3.8)。

尝试重新安装 python3-gi 和 python3.8。 还是一样的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM