"Ihre Python3-Installation ist beschädigt"


12

Ich möchte ein Upgrade von Ubuntu 16.04.5 LTS auf 18.04 durchführen, also lief sudo do-release-upgrade. Nach dem Herunterladen und Extrahieren bionic.tar.gzerhalte ich:

Can not upgrade 

Your python3 install is corrupted. Please fix the '/usr/bin/python3'
symlink.

Ich habe gesehen, wie man "Python-Installation ist beschädigt" behebt? und so sudo ln -sf /usr/bin/python3.6 /usr/bin/python3dachte ich , dass es ein ähnliches Problem sein würde. Aber das hat nicht funktioniert (immer noch die gleiche Fehlermeldung).

Ich habe ein paar Python-Versionen:

$ ls /usr/lib | grep python
python2.7
python3
python3.5
python3.6

$ update-alternatives --display python3
python3 - auto mode
  link best version is /usr/bin/python3.6
  link currently points to /usr/bin/python3.6
  link python3 is /usr/bin/python3
/usr/bin/python3.5 - priority 1
/usr/bin/python3.6 - priority 2

Wie behebe ich python3?


1
Und was ist mit der Neuinstallation (wie in der akzeptierten Antwort erwähnt)?
Kulfy

Antworten:


14

Sie müssen die Standardversion von Python 3 für 16.04 verwenden. Das ist 3,5 , nicht 3,6. Also lauf:

sudo ln -sf /usr/bin/python3.5 /usr/bin/python3

Wenn dies nicht funktioniert, installieren Sie das python3Paket erneut.

sudo apt-get install --reinstall python3

Übrigens update-alternatives --display python3sollte dir geben update-alternatives: error: no alternatives for python3. Verschiedene Versionen von Python sind in Ubuntu keine Alternativen.


30

Ich bin gerade auf Pop! _OS 18.04 auf dieses Problem gestoßen und habe versucht, auf 18.10 zu aktualisieren, und es stellte sich heraus, dass das Problem im Symlink für /usr/bin/pythonund nicht für lag /usr/bin/python3. Ich hatte /usr/bin/python3.6als Alternative für python(nicht python3) konfiguriert , und wenn ich dies änderte, konnte ich do-release-upgradewie erwartet laufen .

Ich wünschte, die Fehlermeldung würde darauf hinweisen pythonund nicht python3.


Vorher mit dem Problem:

$ update-alternatives --display python
python - manual mode
  link best version is /usr/bin/python3.6
  link currently points to /usr/bin/python2.7
  link python is /usr/bin/python
/usr/bin/python2.7 - priority 1
/usr/bin/python3.6 - priority 2 

Ich habe es so behoben:

$ sudo update-alternatives --remove-all python
$ sudo ln -sf /usr/bin/python2.7 /usr/bin/python

Siehe auch diesen Kommentar unten, der eine genauere Lösung beschreibt, die auch besser erklärt, was los ist und wie es behoben werden kann.


1
Ja, ich kann bestätigen, dass die Lösung funktioniert, dies sollte als Antwort akzeptiert werden.
Sumit Jain

Dies funktionierte auch für mich
Efi Kaltirimidou

3
Die Entscheidung für update-alternatives --remove-all pythonwar auf jeden Fall eine unnötige Overkill: Alles , was Sie tun mußten , wurde mit update-alternatives --config pythonhaben , pythonauf die aktuelle python2.*(zB python2.7), dann verwenden Sie update-alternatives --config python3haben python3Punkt zu speziell python3.6 - was die Standard - Python - 3 - Version für 18,04 ist.
KiriSakow

2
Wenn Sie Python 3.7 in Ubuntu 18.04 aktualisieren müssen, tun Sie es nicht systemweit - oder bist du gebunden fiese kleine Probleme am Ende mit systemweit mit wichtigen Tool wie gnome-terminal, update-managerusw. Vielmehr verwendet virtuelle Umgebungen (Dokumentation hier und hier )
KiriSakow

@Kiri Es gibt Möglichkeiten, andere Versionen von Python zu installieren, ohne die Systemversionen zu ersetzen. Zum Beispiel mit dem Deadsnakes PPA .
Wjandrea

4

Ich habe diese Fehlermeldung unter Windows 10 1903 mit WSL Ubuntu beobachtet, als ich ein Upgrade von 16.04 LTS auf 18.04 LTS durchführen wollte .

Nachdem do-release-upgradedies fehlgeschlagen war, wechselte ich pythonzu jeder von angebotenen update-alternatives --config pythonOption die Alternative und führte den Upgrade-Befehl erneut aus. Das hat nicht geholfen.

Dann überprüfte ich die Protokolldatei, /var/log/dist-upgrade/main.logdie die Zeilen enthielt

2019-09-02 20:58:08,686 DEBUG _pythonSymlinkCheck run
2019-09-02 20:58:08,687 DEBUG python symlink points to: '/etc/alternatives/python', but expected is 'python2.7' or
'/usr/bin/python2.7'
2019-09-02 20:58:08,688 ERROR pythonSymlinkCheck() failed, aborting

Obwohl in der Fehlermeldung python3 erwähnt wird , handelt es sich um python2 .

Das Upgrade-Skript prüft /usr/bin/python, ob eine Verknüpfung /usr/bin/python2besteht. Siehe Quellcode DistUpgrade/DistUpgradeController.pyhier: Ubuntu Launchpad

Eine Lösung besteht also darin, Python vollständig aus dem alternativen System zu entfernen und den Link manuell hinzuzufügen, wie in der beliebtesten Antwort beschrieben.

Wenn Sie Python nicht vom alternativen System entfernen möchten, ändern Sie den Link nur für die Zeit während des Aktualisierungsvorgangs:

# rm /usr/bin/python 
# ln -sf /usr/bin/python2.7 /usr/bin/python
# do-release-upgrade

Das hat bei mir funktioniert.

Während des Upgrade-Vorgangs wird die Verbindung automatisch repariert. Wenn das Upgrade abgeschlossen ist, verweist es auf den Python-Eintrag im alternativen Verzeichnis:

$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 24 Sep  2 22:01 /usr/bin/python -> /etc/alternatives/python

Bearbeiten: Für gründliche Informationen kann das Problem auch auftreten, wenn Sie ein Upgrade von 18.04 LTS auf 19.04 durchführen und die Antwort auch für diese Situation gilt.


1
Hinweis: Diese Antwort gilt auch für ein Upgrade von Ubuntu 18.04 LTS auf 19.04. Ich habe es selbst versucht, nachdem das Update auf 18.04 erfolgreich abgeschlossen wurde.
Daniel K.

3

Grundsätzlich besteht die Lösung für dieses Problem darin, /usr/bin/pythonauf die richtige Version von Python hinzuweisen, die Ihre Ubuntu-Version erwartet (zum Beispiel war in 16.04 Python2.7 und in 18.04 Python3.6).

Wenn auf Ihrem System mehrere Versionen von Python installiert sind, können Sie diese verwenden update-alternatives, um sie zu verwalten. Es spielt keine Rolle, ob Ihre Standardalternative für Python die richtige Version ist, die Ihr System erwartet (3.6 in Ubuntu 18.04). Sie funktioniert nicht.

Der Grund , warum dies nicht funktioniert , ist , dass bei Verwendung update-alternatives, /usr/bin/python3zeigt auf /etc/alternatives/python3, und es scheint , das ist nicht genau das gleiche wie macht /usr/bin/python3Punkt /usr/bin/python3.6.

Aus diesem Grund besteht die Lösung für dieses Problem häufig darin, die Verwaltung Ihrer Python3-Versionen zu beenden update-alternativesund /usr/bin/python3auf die richtige Version von Python3 hinzuweisen, die Ihr System erwartet.


/usr/bin/pythonexistiert bei einer Neuinstallation vom 18.04 nicht, aber wenn Sie ein Upgrade anstelle einer Neuinstallation durchführen oder das pythonPaket installieren , sollte es Python 2.7 sein, nicht 3.6. Siehe PEP 394 .
Wjandrea

Verschiedene Versionen von Python sind unter Ubuntu keine Alternativen und sollten nicht mit verwaltet werden update-alternatives. Dies liegt daran, dass das Betriebssystem von einer bestimmten Version abhängig ist, die installiert wird.
Wjandrea
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.