Терминал Gnome не запустится

34

Я только что попытался установить python 3.6 в моей системе Ubuntu 16.04, и теперь я не могу запустить терминал из панели запуска или из Ctrl + Alt + T. Я попытался запустить gnome-terminalиз XTerm и получил следующее сообщение:

Traceback (most recent call last):
  File "/usr/bin/gnome-terminal", line 9, in <module>
    from gi.repository import GLib, Gio
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
    from . import _gi
ImportError: cannot import name '_gi'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "/usr/bin/gnome-terminal", line 9, in <module>
    from gi.repository import GLib, Gio
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
    from . import _gi
ImportError: cannot import name '_gi'

Как я могу исправить эту ошибку?

Следует также отметить, что:

  • Мой gnome-terminalфайл теперь является скриптом Python.
  • gnome-terminal.realФайл будет открыт терминал , как и ожидалось.
  • python3.5 gnome-terminal откроет терминал, как и ожидалось.
bengdahl
источник

Ответы:

34

Вероятно, символическая ссылка /usr/bin/python3указывает на python3.6, чего не должно быть. Исправьте это, выполнив эти команды:

sudo rm /usr/bin/python3
sudo ln -s python3.5 /usr/bin/python3
Гуннар Хьялмарссон
источник
4
Чтобы добавить к этому: это вызвано ошибкой в python3-aptпакете; есть Launchpad ошибка скрывает здесь .
Джош
Символическая ссылка должна быть создана на каком пути? Разве pyenv не является лучшей альтернативой, пока не исправлена ​​ошибка терминала?
josircg
@josircg: Не уверен, что понимаю ваш вопрос о пути. И символическая ссылка, и исполняемый файл находятся в /usr/bin. Там могут быть лучшие альтернативы. Если вы знаете что-либо, пожалуйста, напишите собственный ответ.
Гуннар Хьялмарссон
1
@GunnarHjalmarsson, где я могу запустить эти команды, мой терминал не открывается.
Шойб Шейх
1
@ShoyebSheikh: Может быть, у вас есть XTerm?
Гуннар Хьялмарссон
20

Вам не нужно указывать Python3 на python3.5, просто запустите команды:

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
Инно Цзя
источник
Что это делает именно? Это безопасно?
wjandrea
3
Это должно быть ответом. Это безопасно @wjandrea, я использую его без проблем с Python 3.7 под Ubuntu 18
Huan
Вы можете вставить их в Xterm?
Тахлор
Работает для меня, это должен быть ответ, и я второй @Huan
user1282043
Объяснение того, что это делает, все еще было бы полезно
Дэниел Холмс
8

Правильное изменение по умолчанию Python3 осуществляется через:

sudo update-alternatives --config python3

Хотя копирование _gi_cairo.cpython-35m-x86_64-linux-gnu.soover из python3.5 поверх python3.6 может решить проблему, но нарушит согласованность вашей библиотеки. И этого следует избегать.

Saeed
источник
@davidbak правильное место, чтобы жаловаться на Ubuntu, - это irc или список рассылки Ubuntu (или отправка исправлений в их репозитории), а в стеке потока вы просто кричите в пустоту.
Борис
3

Я знаю, что это старый вопрос, но для тех, кто ищет иной путь, чем глобальное изменение python3 на python 3.5, вы можете изменить первую строку /usr/bin/gnome-terminalс #! /usr/bin/python3на #! /usr/bin/python3.5.

Примечание: у меня нет python 3.5 на моем компьютере, но он import giработает на python 3.6, поэтому использовал 3.6 вместо 3.5.

FelisPhasma
источник
Это gnome-terminalединственное, что ломает или есть другие gnome-*вещи, которые я тоже должен изменить?
Борис