Como corrigir "a instalação do python está corrompida"?

37

Eu estava atualizando da 13.10 para a 14.04 (dev por enquanto, estável em algumas horas) usando do-release-upgradee encontrei o seguinte problema:

Can not upgrade 

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

Resolvi o problema depois de mexer um pouco, então gostaria de compartilhar minha solução aqui. Espero que isso possa ajudar alguém.

4ae1e1
fonte

Respostas:

53

Meu problema acabou sendo devido apenas a um /usr/bin/pythonlink simbólico alterado, conforme sugerido na mensagem de erro. Eu estava usando update-alternativescom /usr/bin/pythonisso estava apontando para /etc/alternatives/python. Aconteceu que do-release-upgradeé realmente rigoroso com este link simbólico e apenas selecionar python2.7 com update-alternativesnão é suficiente, então acabei forçando-o ao seu estado original:

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

E isso resolveu o problema.

Se isso não funcionar, acho que você tem uma instalação python genuinamente corrompida. Eu sugeriria

sudo apt-get install --reinstall python
4ae1e1
fonte
@BenjaminKohl Ainda bem que ajudou :)
4ae1e1
Não estava /etc/alternatives/pythonvinculado /usr/bin/python2.7? algo mais tem maior prioridade?
heemayl
Receio que você esteja entendendo de trás para frente .... /usr/bin/python2.7é o binário atual, nunca deve ser o link simbólico, o link simbólico é o /etc/alternatives/python.. você se importa de verificar novamente?
amigos estão dizendo sobre heemayl
@heemayl Desculpe, interpretou mal o seu comentário + erro de digitação da minha parte. /usr/bin/pythoné um link simbólico para /etc/alternatives/python( /usr/bin/python2.7é claro que é o binário, mas esse não é o problema aqui).
4ae1e1
E sim, /etc/alternatives/pythoné então vinculado ao que você selecionou (não necessariamente /usr/bin/python2.7- por que você precisaria update-alternativesnesse caso?), Mas o ponto é que o vínculo simbólico não é permitido /usr/bin/pythonquando você do-release-upgrade.
4ae1e1
16

este está correto:

sudo update-alternatives --remove-all python
sudo ln -sf /usr/bin/python2.7 /usr/bin/python
Vitaliy Kulikov
fonte
2
Isto está absolutamente correto. Não iria trabalhar para mim até que eu também removido em primeiro lugar todos os existentes usando oupdate-alternatives --remove-all python
TryTryAgain
5

No Ubuntu 18.10, ainda existe o mesmo problema.

O / usr / bin / python está vinculado a uma versão mais antiga. Mesmo depois da versão 2.7, está disponível, mas esse processo super-inteligente está solicitando (em 18.10!) P 2.7. Então eu dei e foi aceito.

Isso resolveu para mim:

1) delete / usr / bin / python fazendo sudo rm /usr/bin/python

2) Crie um novo link sudo ln -sf /usr/bin/python2.7 /usr/bin/python

Em 18.10 eu não poderia usar sudo update-alternatives --remove-all python ou sudo apt-get install --reinstall python.

Funciona para mim. Espero que ajude você também.

opinion_no9
fonte
ls -sfsubstitui o alvo para que 1) seja inútil e 2) seja exatamente o que minha resposta disse para você fazer. Que desperdício ...
4ae1e1
Não discuta: sua cotação está errada e eu disse o oposto do que você diz sobre "... - reinstall python". Sim, minha experiência com 18.10 é diferente da sua e eu explico isso. Não há necessidade de comentários descarados.
opinion_no9
Saw "Se isso não funcionar para você, acho que você tem uma instalação python genuinamente corrompida."?
4ae1e1 02/09
Basicamente, a lição é: você lê os arredores e aprende o porquê, não apenas escolhe os blocos de código existentes, colá-los em seu terminal (perigoso) e ver o que fica. A propósito, você sudo rmainda é inútil.
4ae1e1 02/09
11
É verdade que funciona em 18.10. Obrigado.
Wings
1

Para o Ubuntu 19.04, a versão padrão do python é 3.7. Eu recebi o mesmo erro ao atualizar para o Ubuntu 19.10 e, o seguinte ajudou:

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

Caso você tenha problemas muito sérios com o seu pacote python, a única maneira restante é forçá-lo a removê-lo e depois reinstalá-lo:

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

Se você se deparar com isso a respeito, /usr/bin/python3então:

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

Certifique-se de ligar o link python3.6e não 3.7. Pelo menos isso foi necessário ao atualizar Ubuntu 18.10para 19.04.

Jana
fonte