"Ваша установка python3 пошкоджена"


13

Я хочу оновити з Ubuntu 16.04.5 LTS до 18.04, тому запустив sudo do-release-upgrade. Після завантаження та вилучення bionic.tar.gzя отримую:

Can not upgrade 

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

Я бачив Як виправити "встановлення python пошкоджено"? і тому я sudo ln -sf /usr/bin/python3.6 /usr/bin/python3думав, що це буде подібна проблема. Але це не спрацювало (все одно те саме повідомлення про помилку).

У мене є кілька версій python:

$ ls /usr/lib | grep python
python2.7
python3
python3.5
python3.6

$ update-alternatives --display python3
python3 - auto mode
  link best version is /usr/bin/python3.6
  link currently points to /usr/bin/python3.6
  link python3 is /usr/bin/python3
/usr/bin/python3.5 - priority 1
/usr/bin/python3.6 - priority 2

Як виправити python3?


1
А як щодо перевстановлення (як згадується у прийнятій відповіді)?
Кульфі

Відповіді:


16

Вам потрібно використовувати версію Python 3 за замовчуванням для 16.04. Це 3,5 , а не 3,6. Тож біжіть:

sudo ln -sf /usr/bin/python3.5 /usr/bin/python3

Якщо це не працює, спробуйте перевстановити python3пакет.

sudo apt-get install --reinstall python3

До речі, update-alternatives --display python3повинні вам дати update-alternatives: error: no alternatives for python3. Різні версії Python не є альтернативою в Ubuntu.


32

Я просто зіткнувся з цією проблемою на Pop! _OS 18.04, намагаючись оновити до 18.10, і виявилося, що проблема лежала в симпосиланнях для, /usr/bin/pythonа не для /usr/bin/python3. Я був /usr/bin/python3.6налаштований як альтернатива для python(не python3), і коли я змінив це, я міг би працювати do-release-upgradeяк слід.

Хочеться, щоб повідомлення про помилку вказувалось pythonі ні python3.


Раніше, із проблемою:

$ update-alternatives --display python
python - manual mode
  link best version is /usr/bin/python3.6
  link currently points to /usr/bin/python2.7
  link python is /usr/bin/python
/usr/bin/python2.7 - priority 1
/usr/bin/python3.6 - priority 2 

Я це зафіксував так:

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

Також дивіться цей коментар нижче, де описано більш точне рішення, яке також краще пояснює, що відбувається і як це виправити.


1
Так, я можу підтвердити, що рішення працює, на це слід прийняти відповідь.
Суміт Джайн

Це працювало і для мене
Ефі Калтіріміду

3
Вибір на вибір, update-alternatives --remove-all pythonбезумовно, був непотрібним надмірним вмістом: все, що вам потрібно було зробити, - це використовувати, update-alternatives --config pythonщоб pythonвказати на останню версію python2.*(наприклад, python2.7), а потім використовувати, update-alternatives --config python3щоб мати python3точку конкретно python3.6 - що є версією Python 3 за замовчуванням для 18.04.
KiriSakow

2
Якщо вам необхідно оновити пітон 3.7 в Ubuntu 18.04, не робіть цього загальносистемних - або ви зобов'язані в кінцевому підсумку, противні маленькі проблеми загальносистемних з необхідними інструментами подобаються gnome-terminal, update-managerі т.д. Замість використання віртуальних середовищ (документація тут і тут )
KiriSakow

@Kiri Існують способи встановлення інших версій Python без заміни системних систем. Наприклад, використовуючи глуху зміну PPA .
wjandrea

5

Це повідомлення про помилку я спостерігав у Windows 10 1903 під керуванням WSL Ubuntu, коли хотів оновити з 16.04 LTS до 18.04 LTS .

Після того, як do-release-upgradeне вдалося, я переключив pythonальтернативи на кожен вибір, запропонований update-alternatives --config pythonі запустив команду оновлення знову. Це не допомогло.

Потім я перевірив файл журналу, /var/log/dist-upgrade/main.logякий містив рядки

2019-09-02 20:58:08,686 DEBUG _pythonSymlinkCheck run
2019-09-02 20:58:08,687 DEBUG python symlink points to: '/etc/alternatives/python', but expected is 'python2.7' or
'/usr/bin/python2.7'
2019-09-02 20:58:08,688 ERROR pythonSymlinkCheck() failed, aborting

Тож хоча повідомлення про помилку згадує python3 , проблема стосується python2 .

Сценарій оновлення перевіряє наявність /usr/bin/pythonпосилань на /usr/bin/python2, дивіться тут вихідний код DistUpgrade/DistUpgradeController.py: запуску ubuntu

Отже, одне рішення - повністю видалити python з альтернативної системи та додати посилання вручну, як це описано в найбільш популярній відповіді.

Якщо ви не хочете видаляти python з альтернативної системи, просто змініть посилання лише на час під час оновлення:

# rm /usr/bin/python 
# ln -sf /usr/bin/python2.7 /usr/bin/python
# do-release-upgrade

Це працювало для мене.

У процесі оновлення посилання автоматично відновлюється. Отже, коли оновлення закінчено, воно вказує на запис python у каталозі альтернатив:

$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 24 Sep  2 22:01 /usr/bin/python -> /etc/alternatives/python

Редагувати: для детальної інформації проблема може з’явитися також, якщо ви оновите з 18.04 LTS до 19.04, і косинець також стосується цієї ситуації.


1
Примітка. Ця відповідь стосується також оновлення з Ubuntu 18.04 LTS до 19.04. Я сам спробував це після успішного завершення оновлення до 18.04.
Даніель К.

3

В основному рішення цієї проблеми полягає в тому, щоб /usr/bin/pythonвказати на правильну версію Python, яку очікує випуск Ubuntu (наприклад, 16.04 був Python2.7, а в 18.04 - Python3.6).

Якщо у вашій системі встановлено кілька версій Python, ви можете використовувати їх update-alternativesдля управління. Не важливо, що альтернатива Python за замовчуванням - це правильна версія, яку ваша система очікує (3.6 в Ubuntu 18.04), вона не працюватиме.

Причина , чому це не працює так, при використанні update-alternatives, /usr/bin/python3вказує /etc/alternatives/python3, і здається , що це не зовсім те ж саме, що /usr/bin/python3пункт /usr/bin/python3.6.

Ось чому рішення цієї проблеми часто полягає у припиненні керування вашими версіями Python3 update-alternatives та/usr/bin/python3 на правильну версію Python3, яку очікує ваша система.


/usr/bin/pythonне існує в чистому встановленні 18.04, але це відбувається, якщо ви зробите оновлення замість чистої установки або встановлення pythonпакету, і в цьому випадку це повинен бути Python 2.7, а не 3.6. Див. PEP 394 .
wjandrea

Щоб було зрозуміло, різні версії Python не є альтернативою для Ubuntu і не повинні ними управляти update-alternatives. Це тому, що ОС покладається на певну версію, яка встановлюється.
wjandrea
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.