Das Gnome-Terminal startet nicht

34

Ich habe gerade versucht, Python 3.6 auf meinem Ubuntu 16.04-System zu installieren, und jetzt kann ich das Terminal nicht über den Launcher oder über ausführen Ctrl + Alt + T. Ich habe versucht, gnome-terminalvon XTerm aus zu starten und die folgende Meldung erhalten:

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'

Wie kann ich diesen Fehler beheben?

Es sollte auch beachtet werden, dass:

  • Meine gnome-terminalDatei ist jetzt ein Python-Skript.
  • Die gnome-terminal.realDatei öffnet das Terminal wie erwartet.
  • python3.5 gnome-terminal öffnet das Terminal wie erwartet.
bengdahl
quelle

Antworten:

34

Wahrscheinlich /usr/bin/python3verweist der Symlink auf python3.6, was nicht der Fall sein sollte. Beheben Sie das Problem, indem Sie folgende Befehle ausführen:

sudo rm /usr/bin/python3
sudo ln -s python3.5 /usr/bin/python3
Gunnar Hjalmarsson
quelle
4
Um dies hinzuzufügen: Dies wird durch einen Fehler im python3-aptPaket verursacht; gibt es eine offene Launchpad Bug darüber hier .
Josh
Auf welchem ​​Pfad soll der Symlink erstellt werden? Ist pyenv nicht eine bessere Alternative, bis der Terminal-Fehler behoben ist?
Josircg
@ Josircg: Ich bin mir nicht sicher, ob ich deine Pfadfrage verstehe. Sowohl der Symlink als auch die ausführbare Datei befinden sich in /usr/bin. Es kann durchaus bessere Alternativen geben. Wenn Sie welche kennen, schreiben Sie bitte eine eigene Antwort.
Gunnar Hjalmarsson
1
@GunnarHjalmarsson Wo kann ich diese Befehle ausführen? Mein Terminal öffnet sich nicht.
Shoyeb Sheikh
1
@ShoyebSheikh: Vielleicht hast du XTerm?
Gunnar Hjalmarsson
20

Sie müssen Python3 nicht auf python3.5 verweisen, sondern nur die folgenden Befehle ausführen:

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
quelle
Was genau macht das? Ist es sicher?
wjandrea
3
Das sollte die Antwort sein. Es ist sicher @wjandrea, ich benutze es ohne Probleme mit Python 3.7 unter Ubuntu 18
Huan
Können Sie diese in xterm einfügen?
Tahlor
Funktioniert für mich, dies sollte die Antwort sein und ich zweite @Huan
user1282043
Eine Erklärung dessen, was dies tut, wäre immer noch hilfreich
Daniel Holmes
8

Die ordnungsgemäße Änderung von Standard-Python3 erfolgt über:

sudo update-alternatives --config python3

Das Kopieren des _gi_cairo.cpython-35m-x86_64-linux-gnu.soOver von python3.5 über python3.6 könnte das Problem beheben, würde jedoch die Konsistenz Ihrer Bibliothek beeinträchtigen. Und sollte vermieden werden.

Saeed
quelle
@davidbak Der richtige Ort, um sich über Ubuntu zu beschweren, ist auf der Ubuntu-Liste oder auf der Mailing-Liste (oder beim Senden von Patches an ihre Repositorys).
Boris
3

Ich weiß, dass dies eine alte Frage ist, aber für diejenigen, die nach einer anderen Möglichkeit suchen, als Python3 zu Python 3.5 global zu ändern, können Sie die erste Zeile von /usr/bin/gnome-terminalvon #! /usr/bin/python3nach ändern #! /usr/bin/python3.5.

Hinweis: Ich habe kein Python 3.5 auf meinem Computer, aber ich import giarbeite in Python 3.6, also wird 3.6 anstelle von 3.5 verwendet.

FelisPhasma
quelle
Ist gnome-terminaldas einzige was kaputt geht oder gibt es andere gnome-*Dinge die ich auch ändern sollte?
Boris