Terminal Gnome nie uruchomi się

34

Właśnie próbowałem zainstalować Python 3.6 na moim systemie Ubuntu 16.04, a teraz nie mogę uruchomić terminala z programu uruchamiającego lub z Ctrl + Alt + T. Próbowałem uruchomić gnome-terminalz XTerm i dostałem następujący komunikat:

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'

Jak mogę naprawić ten błąd?

Należy również zauważyć, że:

  • Mój gnome-terminalplik jest teraz skryptem w języku Python.
  • gnome-terminal.realPlik zostanie otwarty terminal, jak oczekiwano.
  • python3.5 gnome-terminal otworzy terminal zgodnie z oczekiwaniami.
bengdahl
źródło

Odpowiedzi:

34

Prawdopodobnie dowiązanie symboliczne /usr/bin/python3wskazuje na python3.6, czego nie powinien. Napraw to, uruchamiając następujące polecenia:

sudo rm /usr/bin/python3
sudo ln -s python3.5 /usr/bin/python3
Gunnar Hjalmarsson
źródło
4
Aby dodać do tego: jest to spowodowane błędem w python3-aptpakiecie; istnieje Launchpad bug otwarte o tym tutaj .
Josh
Na której ścieżce należy utworzyć dowiązanie symboliczne? Czy Pyenv nie jest lepszą alternatywą, dopóki błąd terminala nie zostanie naprawiony?
josircg
@josircg: Nie jestem pewien, czy rozumiem twoje pytanie dotyczące ścieżki. Zarówno dowiązanie symboliczne, jak i plik wykonywalny znajdują się w /usr/bin. Mogą istnieć lepsze alternatywy. Jeśli znasz jakieś, napisz własną odpowiedź.
Gunnar Hjalmarsson,
1
@GunnarHjalmarsson gdzie mogę uruchomić te polecenia, mój terminal się nie otwiera.
Shoyeb Sheikh
1
@ShoyebSheikh: Może masz XTerm?
Gunnar Hjalmarsson
20

Nie musisz wskazywać Python3 na python3.5, wystarczy uruchomić polecenia:

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
Inno Jia
źródło
Co to dokładnie robi? Czy to jest bezpieczne?
wjandrea
3
To powinna być odpowiedź. Jest bezpieczny @ wjandrea, używam go bez problemu z Python 3.7 pod Ubuntu 18
Huan
Czy możesz wkleić je w Xterm?
Tahlor,
Działa dla mnie, to powinna być odpowiedź, a ja drugi @Huan
użytkownik1282043
Wyjaśnienie tego, co to robi, nadal byłoby pomocne
Daniel Holmes
8

Prawidłowa zmiana domyślnego python3 odbywa się poprzez:

sudo update-alternatives --config python3

Chociaż skopiowanie _gi_cairo.cpython-35m-x86_64-linux-gnu.soz Python3.5 na Python3.6 może rozwiązać problem, ale może spowodować uszkodzenie spójności biblioteki. I należy tego unikać.

Saeed
źródło
@davidbak poprawnym miejscem do narzekań na Ubuntu jest lista irc lub lista mailowa Ubuntu (lub przesyłanie łat do ich repozytoriów), podczas przepełnienia stosu po prostu krzyczysz w pustkę.
Boris
3

Wiem, że to stare pytanie, ale dla tych, którzy szukają innego sposobu niż globalna zmiana Python3 na Python 3.5, możesz zmienić pierwszą linię /usr/bin/gnome-terminalz #! /usr/bin/python3na#! /usr/bin/python3.5 .

Uwaga: Nie mam Pythona 3.5 na moim komputerze, ale import gidziała w Pythonie 3.6, więc użyłem 3.6 zamiast 3.5.

FelisPhasma
źródło
Czy gnome-terminaljedyną rzeczą, która się psuje, czy są też inne gnome-*rzeczy, które powinienem zmienić?
Boris