Gnome-терминал не запускается из-за ошибки в скрипте Python, связанной с GI

Когда я запускаю gnome-терминал, я получаю следующую ошибку:

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

Это выглядит странно для меня, потому что сценарий находится в установке Python3.4, но вызывает print, как если бы это был сценарий Python2 (именно поэтому возникает ошибка).

Я попытался переустановить пакет gi с pip3, но он продолжает устанавливать эту версию, которая выглядит как скрипт python2.

Мой gnome-терминал указывает на / usr / bin / gnome-терминал, который является скриптом на python, который начинается с #! / Usr / bin / python3.

Строки с этой конкретной ошибкой в 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, потому что это то, что на shebang в / usr / bin / gnome-Terminal.

python3 в / usr / bin - это ссылка на 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)

И сейчас у меня нет идей.

Это началось после того, как я попытался установить Pumubuntu с https://github.com/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).

Кто-нибудь может мне помочь?

6 ответов

Еще один способ исправить эту ошибку - изменить gnome-terminal сценарий находится в /usr/bin/ и изменение среды (первая строка скрипта) из #!/usr/bin/python3 в #!/usr/bin/python переключиться с Python 3 на Python 2, так как командная строка Github предназначена для Python 2, как отмечалось в предыдущем ответе.

Поэтому откройте xterm нажав клавишу Super (клавиша рядом с левой клавишей Alt внизу) или нажав Alt + F2 и набрав xterm найти альтернативный терминал и щелкнуть по нему для запуска. Далее введите sudo gedit /usr/bin/gnome-terminalнажмите ENTER и отредактируйте первую строку в соответствии с вышеизложенным. Это не лучшее решение, так как вам не нужно было редактировать скрипт, но он работал для меня и не требовал удаления чего-либо.

Обновить

Самая последняя сборка этого требует Python 3, поэтому, как заявил Джон М. в своих комментариях, измените первую строку файла, чтобы использовать Python 3.5:

#!/usr/bin/python3.5

В Python 3.5 я делаю это:

  1. sudo vim /usr/bin/gnome-terminal
  2. Изменить первую строку из #!/usr/bin/python в #!/usr/bin/python3.5

Это исправило мою проблему!

Это старый вопрос, но это первый гугл-хит, на который нужно ответить.

Ошибка вызвана установкой пакета gi на python3.
Это пакет для командной строки GIST Github для python2. Это не связано с объектом гнома или интроспекцией гнома. Посетите его здесь: Python GI на индекс пакета

Это вызывает конфликты имен с gi.repository, а не ищет gir в ваших дистрибутивах python, вашей системе __init__ Ги пакет. И, следовательно, ошибка показывает

ImportError: No module named 'gi.repository'

Удаление этого пакета устранит ошибку. Также, если вы ищете помощника, попробуйте defunkt gist

У меня также возникла эта проблема после обновления 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

Со мной случилось со скриптом /usr/bin/chrome-gnome-shell в Linux (RHEL 7.6):

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

После завершения установки запуск сценария не показал ошибок.

Изменение версии Python 3 приводит к более чем просто неудачному запуску, поскольку Python 3 необходим для работы многих компонентов. Когда вы устанавливаете более новую версию Python, не все пакеты, необходимые для всех компонентов, устанавливаются для нового Python; на случай, если gnome-terminalэто, а в случае других приложений есть и другие. Так что будьте очень осторожны с обновлением Python 3.

Использовать update-alternative выбрать предыдущую версию Python, так как она укажет python3 альтернативы правильной версии с giустановлен. Если нечего настраивать, попробуйте установить 2 версии python в update-alternatives и выберите старую версию.

Другие вопросы по тегам