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.

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

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

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ć.


@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.


Czy gnome-terminaljedyną rzeczą, która się psuje, czy są też inne gnome-*rzeczy, które powinienem zmienić?
Boris
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.