Jak naprawić „instalacja Pythona jest uszkodzona”?

37

Uaktualniłem z 13.10 do 14.04 (na razie program, stabilny za kilka godzin), używając do-release-upgradei napotkałem następujący problem:

Can not upgrade 

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

Rozwiązałem problem po pewnym zamieszaniu, więc chciałbym się tutaj podzielić moim rozwiązaniem. Mam nadzieję, że to może komuś pomóc.

4ae1e1
źródło

Odpowiedzi:

53

Mój problem okazał się być spowodowany wyłącznie zmienionym /usr/bin/pythondowiązaniem symbolicznym, jak sugerowano w komunikacie o błędzie. Korzystałem update-alternativesz, /usr/bin/pythonwięc to wskazywało /etc/alternatives/python. Okazało się, że do-release-upgradejest to naprawdę ścisłe z tym dowiązaniem symbolicznym i po prostu wybierając Python2.7 za pomocąupdate-alternatives mało, więc skończyłem na zmuszaniu go do oryginalnego stanu:

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

I to rozwiązało problem.

Jeśli to nie zadziała, myślę, że masz naprawdę uszkodzoną instalację Pythona. Sugerowałbym

sudo apt-get install --reinstall python
4ae1e1
źródło
@BenjaminKohl Cieszę się, że pomogło :)
4ae1e1
Nie został /etc/alternatives/pythondowiązany do /usr/bin/python2.7? czy coś innego ma wyższy priorytet?
heemayl
Obawiam się, że dostajesz go do tyłu .... /usr/bin/python2.7to jest rzeczywisty plik binarny, nigdy nie powinien być dowiązaniem symbolicznym, dowiązanie symboliczne to. /etc/alternatives/pythonCzy masz coś przeciwko sprawdzeniu go ponownie?
heemayl
@ heemayl Przepraszamy, źle odczytałem twój komentarz + literówka z mojej strony. /usr/bin/pythonjest dowiązaniem symbolicznym do /etc/alternatives/python(oczywiście /usr/bin/python2.7jest to plik binarny, ale nie o to tu chodzi).
4ae1e1
I tak, /etc/alternatives/pythonjest wtedy symbolicznie dowiązany do wszystkiego, co wybrałeś (niekoniecznie /usr/bin/python2.7- dlaczego miałbyś update-alternativesw takim razie w ogóle potrzebować ?), Ale chodzi o to, że dowiązanie symboliczne nie jest dozwolone, /usr/bin/pythonkiedy ty do-release-upgrade.
4ae1e1
16

ten jest poprawny:

sudo update-alternatives --remove-all python
sudo ln -sf /usr/bin/python2.7 /usr/bin/python
Witalij Kulikow
źródło
2
To jest absolutnie poprawne. Nie działałoby to dla mnie, dopóki najpierw nie usunąłem wszystkich istniejących za pomocąupdate-alternatives --remove-all python
TryTryAgain 10.10.16
5

W Ubuntu 18.10 nadal występuje ten sam problem.

Plik / usr / bin / python jest powiązany ze starszą wersją. Dostępne są nawet później niż 2.7, ale ten super-inteligentny proces prosi (w 18.10!) O P 2.7. Dałem więc to i zostało przyjęte.

To rozwiązało dla mnie:

1) Usuń / usr / bin / python robi sudo rm /usr/bin/python

2) Utwórz nowy link sudo ln -sf /usr/bin/python2.7 /usr/bin/python

W 18.10 NIE mogłem użyć sudo update-alternatives --remove-all python lubsudo apt-get install --reinstall python .

Pracuje dla mnie. Mam nadzieję, że to również pomoże.

opinia_ nr 9
źródło
ls -sfprzesłania cel, więc 1) nie ma sensu, a 2) jest dokładnie tym, co powiedziałem, byście zrobili. Co za strata ...
4ae1e1
Dont rant: Twój cytat jest nieprawidłowy i powiedziałem coś przeciwnego do tego, co mówisz o „... - reinstall python”. Tak, moje doświadczenie z 18.10 jest inne niż twoje i wyjaśniam to. Bezczelne komentarze wcale nie są potrzebne.
opinia_no9
Saw „Jeśli to nie zadziała, myślę, że masz naprawdę uszkodzoną instalację Pythona.”?
4ae1e1
Zasadniczo, lekcja jest taka: czytasz otoczenie i dowiadujesz się, dlaczego, a nie tylko wybierasz dowolne bloki kodu, wklejasz je do swojego terminalu (niebezpieczne) i sprawdzasz, co się trzyma. Nawiasem mówiąc, twoje sudo rmjest nadal bezcelowe.
4ae1e1
1
To prawda, działa 18.10. Dzięki.
Wings
1

W przypadku Ubuntu 19.04 domyślną wersją Pythona jest 3.7. Otrzymałem ten sam błąd podczas aktualizacji do Ubuntu 19.10, a następujące pomogły:

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

W przypadku bardzo poważnych problemów z pakietem python, jedynym sposobem jest wymuszenie jego usunięcia, a następnie ponownej instalacji:

sudo dpkg --remove --force-remove-reinstreq --force-depends python3
sudo apt-get -f install
Vibhu Vaibhav
źródło
0

Jeśli się na to natkniesz, /usr/bin/python3to:

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

Upewnij się, że dowiązanie symboliczne, python3.6a nie 3.7. Przynajmniej było to wymagane podczas aktualizacji Ubuntu 18.10do 19.04.

Jana
źródło