Comment réparer “l'installation de python est corrompue”?

37

Je passais de 13.10 à 14.04 (dev pour le moment, stable en quelques heures) en utilisant do-release-upgradeet rencontrant le problème suivant:

Can not upgrade 

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

J'ai résolu le problème après avoir déconné un peu, alors j'aimerais partager ma solution ici. J'espère que cela pourrait aider quelqu'un.

4ae1e1
la source

Réponses:

53

Mon problème s'est avéré être uniquement dû à un /usr/bin/pythonlien symbolique modifié, comme suggéré dans le message d'erreur. J'utilisais update-alternativesavec /usr/bin/pythondonc ça pointait vers /etc/alternatives/python. Il s’est avéré que do-release-upgradec’est vraiment strict avec ce lien symbolique et que choisir simplement python2.7 avec update-alternativesn’est pas suffisant, j’ai donc fini par le forcer à son état initial:

sudo ln -sf /usr/bin/python2.7 /usr/bin/python

Et cela a résolu le problème.

Si cela ne fonctionne pas pour vous, alors je suppose que vous avez une installation python véritablement corrompue. Je suggère

sudo apt-get install --reinstall python
4ae1e1
la source
@BenjaminKohl Glad cela a aidé :)
4ae1e1
N'était-ce pas un /etc/alternatives/pythonlien symbolique /usr/bin/python2.7? Est-ce que quelque chose d'autre a une priorité plus élevée?
Heemayl
Je crains que vous ne /usr/bin/python2.7le /etc/alternatives/pythonrécupériez à l' envers. Le binaire est-il réel? Cela ne devrait jamais être le lien symbolique. Le lien symbolique est le .
Heemayl
@heemayl Désolé, mal interprété ton commentaire + faute de frappe de ma part. /usr/bin/pythonest un lien symbolique vers /etc/alternatives/python(bien sûr, /usr/bin/python2.7c'est le binaire, mais ce n'est pas le problème ici).
4ae1e1
Et oui, les /etc/alternatives/pythonliens symboliques sont-ils liés à ce que vous avez sélectionné (pas nécessairement /usr/bin/python2.7- pourquoi auriez-vous même besoin update-alternativesde cela dans ce cas?), Mais le point est que la liaison symbolique n'est pas autorisée pour /usr/bin/pythonvous do-release-upgrade.
4ae1e1
16

celui-ci est correct:

sudo update-alternatives --remove-all python
sudo ln -sf /usr/bin/python2.7 /usr/bin/python
Vitaliy Kulikov
la source
2
C'est absolument correct. Cela ne fonctionnerait pas pour moi jusqu'à ce que je supprime aussi tout ce qui existe déjà avecupdate-alternatives --remove-all python
TryTryAgain
5

Dans Ubuntu 18.10, le même problème se pose.

Le répertoire / usr / bin / python est lié à une version antérieure. Même plus tard que 2.7 sont disponibles, mais ce processus super intelligent demande (dans 18.10!) P 2.7. Alors je l'ai donné et il a été accepté.

Cela l'a résolu pour moi:

1) supprimez / usr / bin / python en faisant sudo rm /usr/bin/python

2) Créer un nouveau lien sudo ln -sf /usr/bin/python2.7 /usr/bin/python

En 18h10 je ne pouvais pas utiliser sudo update-alternatives --remove-all python ou sudo apt-get install --reinstall python.

Travaille pour moi. J'espère que cela vous aidera aussi.

opinion_no9
la source
ls -sfRemplace la cible de manière 1) est inutile, et 2) correspond exactement à ce que ma réponse vous a demandé de faire. Quelle perte ...
4ae1e1
Ne vous laissez pas aller: votre citation est fausse et j'ai dit le contraire de ce que vous dites à propos de "... --installez python". Oui, mon expérience avec 18.10 est différente de la vôtre et je l'explique. Pas besoin du tout de commentaires téméraires.
opinion_no9
Saw "Si cela ne fonctionne pas pour vous, alors je suppose que vous avez une installation python véritablement corrompue."?
4ae1e1
En gros, la leçon est la suivante: vous lisez les environs et vous comprenez pourquoi, pas seulement cherrypick, quels que soient les codes bloqués, collez-les dans votre terminal (dangereux) et voyez ce qui reste bloqué. À propos, votre sudo rmest toujours inutile.
4ae1e1 le
1
C'est vrai, ça marche le 18.10. Merci.
Ailes
1

Pour Ubuntu 19.04, la version par défaut de python est 3.7. La même erreur s'est produite lors de la mise à niveau vers Ubuntu 19.10 et les éléments suivants ont été utiles:

sudo apt-get install --reinstall python3
sudo ln -sf /usr/bin/python3.7 /usr/bin/python3

Au cas où vous auriez de très graves problèmes avec votre paquet python, la seule solution consiste à forcer son retrait, puis à le réinstaller:

sudo dpkg --remove --force-remove-reinstreq --force-depends python3
sudo apt-get -f install
Vibhu Vaibhav
la source
0

Si vous rencontrez ce problème, /usr/bin/python3alors:

sudo update-alternatives --remove-all python3
sudo ln -sf /usr/bin/python3.6 /usr/bin/python3

Assurez-vous de créer un lien symbolique python3.6et non 3.7. Au moins, cela était nécessaire lors de la mise Ubuntu 18.10à niveau vers 19.04.

Jana
la source