【问题标题】:Gnome-terminal not starting due to error in python script related to GI由于与 GI 相关的 python 脚本中的错误,Gnome-terminal 无法启动
【发布时间】:2015-09-17 21:14:29
【问题描述】:

当我运行 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

这对我来说看起来很奇怪,因为该脚本位于 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     

这建议一个快速的解决方法:在这两个打印行中加上括号。

  File "/usr/bin/gnome-terminal", line 9, in <module>
    from gi.repository import GLib, Gio
ImportError: No module named 'gi.repository'

这很奇怪。

这必须在 /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)

现在我没有想法了。

这是在我尝试从 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.')

所以我想我必须输入这些命令。这一定破坏了我的 gir 安装 (gir)。

谁能帮帮我?

【问题讨论】:

  • 你运行的是哪个版本的 Ubuntu?
  • 15.04,我试过 sudo pip3 install pygobject 但它失败了“raise SystemExit, 'ERROR: Nothing to do, gio could not be found and is essential.'” 尝试 sudo apt-get install --在安装脚本期间,重新安装 glib 让我再次回到“ImportError: No module named 'gi.repository'”。
  • 我真的不确定Ubuntu在这里搞砸了什么;这个包装脚本是由他们提供的。主流 gnome-terminal 是一个二进制文件,它可能以 /usr/bin/gnome-terminal.real 或类似的形式提供给您,并且根本不使用 python。你可以尝试直接启动这个。

标签: python linux ubuntu terminal gnome


【解决方案1】:

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

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

更新

最新版本需要 Python 3,因此正如 Jon M. 在他的 cmets 中所说,将文件的第一行更改为使用 Python 3.5:

#!/usr/bin/python3.5

【讨论】:

  • @theawless 的解决方案对我没有帮助,但修改 gnome-terminal 脚本确实对我有用。
  • 嗯...在又一次重建之后,似乎将第一行(这次)更改为 #!/usr/bin/python3.5 有效(在安装 Python 3.6 时中断)
  • 将 #!/usr/bin/python3 切换到 #!/usr/bin/python - 这个工作!
【解决方案2】:

在 Python 3.5 中,我这样做:

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

这解决了我的问题!

【讨论】:

  • 升级到 Python 3.6 后,gnome-terminal 无法启动。此更改为我修复了它,谢谢。
【解决方案3】:

这是一个老问题,但这是谷歌第一次点击,应该回答。

错误是在python3上安装gi包引起的。
它是 python2GIST Github 命令行 包。它与 gnome 对象或 gnome 自省相关。 在这里访问它: python gi on package (aka pygobject)

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

ImportError: No module named 'gi.repository'

卸载该软件包将解决该错误。另外,如果您正在寻找 gister,请尝试defunkt gist

【讨论】:

  • 卸载 gi 导致缺少括号错误变为 no mudle named 'gi' 错误,但不能解决问题。
  • 可能你的 gi 安装搞砸了。尝试重新安装它。
  • 我相信 gi (pypi.python.org/pypi/gi) 有问题,它将 2.x 代码安装到所有 /usr/local/lib/python3.x/dist-packages 文件夹;项目似乎被废弃了,主页不可用,我找不到任何提交问题的地方。
  • 我不得不求助于更改 /usr/bin/gnome-terminal,正如 rayryeng 所建议的那样,这解决了我的问题。但我同意卸载 gi 会更干净。这样做的命令是什么? (我尝试了 pip uninstall gi 和 pip3 uninstall gi 但被告知该包不存在于这两个位置)
【解决方案4】:

在将 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

【讨论】:

  • 我真的不喜欢你解决它的方式,但它确实有效。
  • @Qohelet 我知道这不是正确的方法,但在尝试了所有解决方案后,我找到了解决问题的唯一方法。
【解决方案5】:

在 Linux (RHEL 7.6) 上使用 /usr/bin/chrome-gnome-shell 脚本发生在我身上:

Traceback (most recent call last):
Traceback (most recent call last):
  File "/usr/bin/chrome-gnome-shell", line 16, in <module>
    from gi.repository import GLib, Gio
ModuleNotFoundError: No module named 'gi'

要修复它,我必须安装 PyGObject:

$ sudo yum install python36-gobject.x86_64
# or directly with pip: pip3 install PyGObject

安装完成后,运行脚本没有错误。

【讨论】:

    【解决方案6】:

    更改 Python 3 版本会导致超过 gnome-terminal 无法启动,因为 Python 3 对于许多组件的运行至关重要。当您安装较新版本的 Python 时,并非所有组件所需的所有包都为新 Python 安装;在gnome-terminal 的情况下是gi,在其他应用程序的情况下还有其他应用程序。所以升级 Python 3 时要非常小心。

    使用update-alternative 选择以前的Python 版本将起作用,因为它会将python3 替代品指向安装了gi 的正确版本。如果无需配置,请尝试将您的 2 个版本的 python 安装到 update-alternatives 并选择以前的版本。

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2014-08-10
      • 1970-01-01
      相关资源
      最近更新 更多