web-dev-qa-db-fra.com

"Votre installation de python3 est corrompue"

Je veux passer d'Ubuntu 16.04.5 LTS à 18.04, alors a couru Sudo do-release-upgrade. Après avoir téléchargé et extrait bionic.tar.gz, je reçois:

Can not upgrade 

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

J'ai vu comment réparer "l'installation de python est corrompue"? et c'est ce que j'ai fait Sudo ln -sf /usr/bin/python3.6 /usr/bin/python3 en pensant qu'il s'agirait d'un problème similaire. Mais cela n'a pas fonctionné (toujours le même message d'erreur).

J'ai quelques versions python:

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

Comment réparer python3?

7
mRcSchwering

Vous devez utiliser la version par défaut de Python 3 pour 16.04. C'est .5 , pas 3.6. Alors courez:

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

Si cela ne fonctionne pas, essayez de réinstaller le package python3.

Sudo apt-get install --reinstall python3

Au fait, update-alternatives --display python3 devrait vous donner update-alternatives: error: no alternatives for python3. Les différentes versions de Python ne sont pas des alternatives dans Ubuntu.

8
wjandrea

Je viens de rencontrer ce problème sur Pop! _OS 18.04, en essayant de passer à 18.10, et il s’avère que le problème réside dans le lien symbolique pour /usr/bin/python et non pour /usr/bin/python3. J'avais eu /usr/bin/python3.6 configuré comme une alternative à python (pas python3), et quand j'ai changé cela, alors je pouvais exécuter do-release-upgrade comme prévu.

Je souhaite que le message d'erreur pointé à python et non python3.


Avant, avec le problème:

$ 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 

Je l'ai corrigé de cette façon:

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

Voir aussi ce commentaire ci-dessous qui décrit une solution plus précise qui explique également mieux ce qui se passe et comment y remédier.

13
J. B. Rainsberger

En gros, la solution à ce problème consiste à faire pointer /usr/bin/python sur la bonne version de Python attendue par votre version d'Ubuntu (par exemple, Python2.7 en 16.04 et Python3.6 en 18.04).

Si plusieurs versions de Python sont installées sur votre système, vous utiliserez peut-être update-alternatives pour les gérer. Peu importe votre alternative par défaut pour Python est la bonne version attendue par votre système (3.6 dans Ubuntu 18.04), cela ne fonctionnera pas.

La raison pour laquelle cela ne fonctionne pas est que, lorsque vous utilisez update-alternatives, /usr/bin/python3 pointe sur /etc/alternatives/python3, et il semble que ce ne soit pas exactement la même chose que faire /usr/bin/python3 pointer sur /usr/bin/python3.6.

C'est pourquoi la solution à ce problème consiste souvent à cesser de gérer vos versions de Python3 avec update-alternatives et à faire en sorte que /usr/bin/python3 pointe sur la bonne version de Python3 attendue par votre système.

1
Diego Pino