由于与GI相关的python脚本中的错误,Gnome终端无法启动

8 python linux terminal ubuntu gnome

当我运行gnome-terminal时,我收到以下错误:

Traceback (most recent call last):
  File "/usr/bin/gnome-terminal", line 9, in <module>
    from gi.repository import GLib, Gio
  File "/usr/local/lib/python3.4/dist-packages/gi/__init__.py", line 39
    print url
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪,因为脚本位于python 3.4安装中,但是调用print就好像它是一个python2脚本(这就是出错的原因).

我试图用pip3重新安装包gi,但它继续安装这个看起来像python2脚本的版本.

我的gnome-terminal指向/ usr/bin/gnome-terminal,这是一个以#!/ usr/bin/python3开头的python脚本.

init .py中具有该特定错误的行是:

if __name__ == '__main__':                                                                                                                                                                                                                                                                                      
         try:                                                                                                                                                                                                                                                                                                    
                 url = save_file()                                                                                                                                                                                                                                                                               
                 print url                                                                                                                                                                                                                                                                                   
         except GistError as e:                                                                                                                                                                                                                                                                                  
                 print e.value     
Run Code Online (Sandbox Code Playgroud)

这表明可以快速修复:将括号放在这两条打印行中.

  File "/usr/bin/gnome-terminal", line 9, in <module>
    from gi.repository import GLib, Gio
ImportError: No module named 'gi.repository'
Run Code Online (Sandbox Code Playgroud)

这很奇怪.

这必须在/ usr/bin/python3上运行,因为这就是/ usr/bin/gnome-terminal上的shebang.

/ usr/bin上的python3实际上是python3.4的链接,它是一个二进制文件.

然后我运行pip3 install gi,我得到以下输出,它告诉我实际安装了gi.

Requirement already satisfied (use --upgrade to upgrade): gi in /usr/local/lib/python3.4/dist-packages
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/lib/python3/dist-packages (from gi)
Run Code Online (Sandbox Code Playgroud)

而现在我的想法不足.

这是在我尝试从https://github.com/Pumubuntu/Pumubuntu安装Pumubuntu之后开始的.

在主脚本文件中,它说:

import sys
if len(sys.argv) == 1:
    print('Importing Python modules. If one is missing get it with:\n'
          '  "sudo apt-get install python-..." or\n'
          '  "sudo apt-get install girX.Y-..." for gi.repository imports.')
Run Code Online (Sandbox Code Playgroud)

所以我想我必须输入这些命令.这肯定打破了我的gir装置(gir).

有谁能够帮我?

ray*_*ica 12

我发现修复此错误的另一种方法是修改gnome-terminal位于其中的脚本/usr/bin/并将环境(脚本的第一行)#!/usr/bin/python3更改 #!/usr/bin/python为从Python 3切换到Python 2,因为Github命令行适用于Python 2,如以前的答案.

因此,xterm通过按下超级键(左下方Alt键旁边的键)或按Alt+ 键F2并键入xterm以搜索备用终端并单击它以运行来打开.接下来,按照上面键入sudo gedit /usr/bin/gnome-terminal,按下ENTER并编辑第一行.这不是最好的解决方案,因为您不必编辑脚本,但它对我有用,并且不需要卸载任何东西.

更新

最新版本需要Python 3,所以Jon M.在他的评论中指出,更改文件的第一行以使用Python 3.5:

#!/usr/bin/python3.5
Run Code Online (Sandbox Code Playgroud)

  • @theawless的解决方案对我没有帮助,但修改gnome-terminal脚本确实对我有用. (2认同)
  • 嗯...经过另一次重建后,似乎将第一行(这次)更改为 #!/usr/bin/python3.5 有效(安装 Python 3.6 时中断) (2认同)

小智 7

在Python 3.5中,我这样做:

  1. sudo vim /usr/bin/gnome-terminal
  2. 将第一行修改#!/usr/bin/python#!/usr/bin/python3.5

这解决了我的问题!


小智 6

这是一个老问题,但这是第一次谷歌热播,应该回答.

该错误是由python3上安装gi包引起的. 这是一个包GIST Github的命令行python2.它涉及到GNOME对象或GNOME反省.请访问: python gi on package index

它导致与gi.repository的命名冲突,而不是在你的python dist-packages中寻找gir,你的系统__init__是gi包.因此错误显示

ImportError: No module named 'gi.repository'

卸载该程序包将解决该错误.此外,如果你正在寻找一个大人物,尝试defunkt要点


Som*_*mil 5

将python3.5更新到python3.6后我也遇到了这个问题

这不是更好的方法,但工作正常。

发生此问题是由于 _gi_cairo 。我通过以下代码解决了它

 cd /usr/lib/python3/dist-packages/gi/
 sudo cp _gi.cpython-35m-x86_64-linux-gnu.so _gi.cpython-36m-x86_64-linux-gnu.so
 sudo cp _gi_cairo.cpython-35m-x86_64-linux-gnu.so _gi_cairo.cpython-36m-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)