当我想切换到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。还是一样的问题
答案 0 :(得分:7)
为python 3.8安装gi
:python3.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)