¿Cómo arreglar "la instalación de Python está dañada"?

37

Estaba actualizando de 13.10 a 14.04 (desarrollador por ahora, estable en unas pocas horas) usando do-release-upgradey encontré el siguiente problema:

Can not upgrade 

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

Resolví el problema después de jugar un poco, así que me gustaría compartir mi solución aquí. Espero que esto pueda ayudar a alguien.

4ae1e1
fuente

Respuestas:

53

Mi problema resultó ser únicamente debido a un /usr/bin/pythonenlace simbólico alterado como se sugiere en el mensaje de error. Estaba usando update-alternativescon /usr/bin/pythonlo que apuntaba /etc/alternatives/python. Resultó que do-release-upgradees realmente estricto con este enlace simbólico y simplemente seleccionar python2.7 con update-alternativesno es suficiente, así que terminé forzándolo a su estado original:

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

Y eso resolvió el problema.

Si esto no funciona para usted, entonces supongo que tiene una instalación de Python genuinamente dañada. Sugeriría

sudo apt-get install --reinstall python
4ae1e1
fuente
@BenjaminKohl Me alegro de que haya ayudado :)
4ae1e1
¿No se /etc/alternatives/pythonvinculó a /usr/bin/python2.7? ¿Algo más tiene mayor prioridad?
heemayl
Me temo que lo está haciendo al revés ... /usr/bin/python2.7es el binario real, nunca debería ser el enlace simbólico, el enlace simbólico es el /etc/alternatives/python... ¿te importaría volver a comprobarlo?
heemayl
@heemayl Lo siento, leí mal tu comentario + error tipográfico de mi parte. /usr/bin/pythones un enlace simbólico a /etc/alternatives/python(por supuesto, /usr/bin/python2.7es el binario, pero ese no es el problema aquí).
4ae1e1
Y sí, /etc/alternatives/pythonse enlaza a lo que haya seleccionado (no necesariamente /usr/bin/python2.7, ¿por qué lo necesitaría update-alternativesen ese caso?), Pero el punto es que no se permite la simulación /usr/bin/pythoncuando usted do-release-upgrade.
4ae1e1
16

este es correcto:

sudo update-alternatives --remove-all python
sudo ln -sf /usr/bin/python2.7 /usr/bin/python
Vitaliy Kulikov
fuente
2
Esto es absolutamente correcto. No funcionaría para mí hasta que también elimine por primera vez todo lo existente usando elupdate-alternatives --remove-all python
Try TryAgain
5

En Ubuntu 18.10 todavía hay el mismo problema.

/ Usr / bin / python está vinculado a una versión anterior. Incluso más tarde que 2.7 están disponibles, pero este proceso súper inteligente está pidiendo (¡en 18.10!) P 2.7. Entonces lo di y fue aceptado.

Esto lo resolvió para mí:

1) eliminar / usr / bin / python haciendo sudo rm /usr/bin/python

2) Crear un nuevo enlace sudo ln -sf /usr/bin/python2.7 /usr/bin/python

En 18.10 NO pude usar sudo update-alternatives --remove-all python o sudo apt-get install --reinstall python.

Funciona para mi. Espero que también te ayude.

opinion_no9
fuente
ls -sfanula el objetivo, por lo que 1) no tiene sentido y 2) es exactamente lo que mi respuesta te dijo que hicieras. Qué desperdicio ...
4ae1e1
No despotricar: Su cita es incorrecta y le dije lo contrario de lo que dice sobre "... - reinstalar python". Sí, mi experiencia con 18.10 es diferente a la tuya y yo a explicar esto. No hay necesidad de comentarios descarados.
opinion_no9
¿Vio "Si esto no funciona para usted, entonces supongo que tiene una instalación de Python realmente dañada"?
4ae1e1
Básicamente, la lección es: lees los alrededores y aprendes por qué, no solo seleccionas los bloques de código que hay, los pegas en tu terminal (peligroso) y ves qué se pega. Por cierto, tu sudo rmsigue siendo inútil.
4ae1e1
1
Es cierto, que funciona en 18.10. Gracias.
Alas
1

Para Ubuntu 19.04, la versión predeterminada de Python es 3.7. Recibí el mismo error al actualizar a Ubuntu 19.10, y lo siguiente ayudó:

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

En caso de que tenga problemas muy graves con su paquete de Python, la única forma que queda es forzar la eliminación y luego reinstalarlo:

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

Si te encuentras con esto con respecto a /usr/bin/python3:

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

Asegúrese de vincular python3.6y no 3.7. Al menos eso era necesario al actualizar Ubuntu 18.10a 19.04.

Jana
fuente