Как исправить «установка Python повреждена»?


37

Я обновлялся с 13.10 до 14.04 (сейчас разработчик работает стабильно через несколько часов), do-release-upgradeи столкнулся со следующей проблемой:

Can not upgrade 

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

Я решил проблему после того, как немного возился, поэтому я хотел бы поделиться своим решением здесь. Надеюсь, это может кому-то помочь.

Ответы:


53

Моя проблема оказалась исключительно из-за измененной /usr/bin/pythonсимволической ссылки, как предлагается в сообщении об ошибке. Я использовал update-alternativesс /usr/bin/pythonтаким, чтобы он указывал на /etc/alternatives/python. Оказалось, что do-release-upgradeэто действительно строго с этой символической ссылкой, и простого выбора python2.7 с помощью update-alternativesнедостаточно, поэтому я в итоге перевел его в исходное состояние:

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

И это решило проблему.

Если это не работает для вас, то, я думаю, у вас установлена ​​действительно поврежденная версия Python. Я бы предложил

sudo apt-get install --reinstall python

@BenjaminKohl Рад, что это помогло :)
4ae1e1

Не было /etc/alternatives/pythonссылки на /usr/bin/python2.7? что-то еще имеет более высокий приоритет?
Heemayl

Я боюсь, что вы получаете его задом наперед .... /usr/bin/python2.7это фактический двоичный файл, он никогда не должен быть символической /etc/alternatives/pythonссылкой , символическая ссылка является ... вы не возражаете проверить его снова?
Heemayl

@heemayl Извините, неправильно прочитал ваш комментарий + опечатка с моей стороны. /usr/bin/pythonэто символическая ссылка на /etc/alternatives/python(конечно, /usr/bin/python2.7это двоичный файл, но это не проблема здесь).
4ae1e1

И да, /etc/alternatives/pythonтогда есть символическая ссылка на то, что вы выбрали (не обязательно /usr/bin/python2.7- зачем вам это вообще нужно update-alternatives?), Но суть в том, что символическая ссылка не разрешена, /usr/bin/pythonкогда вы do-release-upgrade.
4ae1e1

16

это правильно:

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

2
Это абсолютно правильно. Это не будет работать для меня, пока я сначала не удалил все существующие, используяupdate-alternatives --remove-all python
TryTryAgain

5

В Ubuntu 18.10 все та же проблема.

/ Usr / bin / python связан со старой версией. Даже позже, чем 2.7 доступны, но этот супер-умный процесс запрашивает (в 18.10!) P 2.7. Я дал это, и это было принято.

Это решило это для меня:

1) удалить / usr / bin / python sudo rm /usr/bin/python

2) Создать новую ссылку sudo ln -sf /usr/bin/python2.7 /usr/bin/python

В 18.10 я не мог использовать sudo update-alternatives --remove-all python или sudo apt-get install --reinstall python.

Работает для меня. Надеюсь, это вам тоже поможет.


ls -sfпереопределяет цель, поэтому 1) бессмысленно, и 2) это именно то, что мой ответ сказал вам сделать. Какая трата ...
4ae1e1

Не ругайтесь: ваша цитата неверна, и я сказал противоположное тому, что вы говорите о "... --reinstall python". Да, мой опыт работы с 18.10 отличается от вашего, и я объясняю это. Нет необходимости в наглых комментариях.
мнение_9

Видел: «Если это не сработает для вас, то, я думаю, у вас установлена ​​действительно поврежденная версия Python».?
4ae1e1

По сути, урок таков: вы читаете окружение и узнаете, почему, а не просто черпаете какие-либо блоки кода, вставляете их в свой терминал (опасно) и смотрите, что залипает. Кстати, твоя sudo rmдо сих пор бессмысленна.
4ae1e1

1
Правда работает 18.10. Спасибо.
Крылья

1

Для Ubuntu 19.04 версия Python по умолчанию - 3.7. Я получил ту же ошибку при обновлении до Ubuntu 19.10, и помогло следующее:

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

В случае, если у вас очень серьезные проблемы с вашим пакетом Python, остается только принудительно удалить его, а затем переустановить:

sudo dpkg --remove --force-remove-reinstreq --force-depends python3
sudo apt-get -f install

0

Если вы столкнулись с этим относительно /usr/bin/python3тогда:

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

Убедитесь, что символическая ссылка python3.6и нет 3.7. По крайней мере, это требовалось при обновлении Ubuntu 18.10до 19.04.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.