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

时间:2020-01-21 09:45:22

标签: python python-3.x ubuntu

当我想切换到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。还是一样的问题

4 个答案:

答案 0 :(得分:7)

为python 3.8安装gipython3.8 -m pip install pgi 然后,代替import gi使用:

import pgi
pgi.install_as_gi()
from gi.repository import GLib, Gio

或者,您可以强制为python 3.8安装PyGObject:

sudo python3.8 -m pip install --ignore-installed PyGObject

应该像以前一样允许一个from gi import ...

答案 1 :(得分:2)

我有同样的问题。我将python3链接到python3.6,对我来说它指向3.8。那解决了问题。

cd /usr/bin/
rm python3
ln -s python3.6 python3

仅此而已。现在我的系统开始正常运行。

答案 2 :(得分:0)

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

<块引用>

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

sh-5.0# python3 -c 'from gi.repository import GLib' 回溯(最近一次调用最后一次): 文件“”,第 1 行,在 文件“/usr/lib64/python3.8/site-packages/gi/init.py”,第 42 行,在 从 。导入_gi 导入错误:无法从“gi”(/usr/lib64/python3.8/site-packages/gi/init.py)导入名称“_gi” sh-5.0# mv /usr/lib64/python3.8/site-packages/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 'from gi.repository import 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

答案 3 :(得分:-3)

有同样的问题,无法从脚本文件夹加载模块。就我而言,如果我更改工作目录(例如,但仅适用于内联命令),则工作:

cd /tmp; python -c 'from gocd import Server'
echo $?
0

将脚本复制到/ tmp后,它不起作用

cp gocd.py /tmp
cd /tmp; python -c 'from gocd import Server'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/tmp/gocd.py", line 3, in <module>
    from gocd import Server
ImportError: cannot import name 'Server' from partially initialized module 'gocd' (most likely due to a circular import) (/tmp/gocd.py)