После установки Python 3.9.6 на Ubuntu 18.04 я не смог запустить sudo apt

Вопрос или проблема

Я не знал, что Python 3.6 уже был установлен каким-то пакетом до того, как я установил Python 3.9.6 на свою систему.

Я следовал шагам, указанным по адресу https://phoenixnap.com/kb/how-to-install-python-3-ubuntu#ftoc-heading-7

  1. sudo apt update
    
  2. sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
    
  3. cd /tmp
    
  4. wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz
    
  5. tar -xf Python-3.9.6.tgz
    
  6. cd python-3.9.6
    
  7. ./configure --enable-optimizations
    
  8. (Перезаписать установленный Python по умолчанию)

    “Чтобы установить Python 3.9.6 поверх уже существующего Python, введите следующее”:

    sudo make install
    

После этих шагов я выяснил, что у меня установлено 3 версии python:

$ python -V
Python 3.6.9
$ python2 -V
Python 2.7.17
$ python3 -V
Python 3.9.6

Затем я выполнил:

sudo apt update

Терминал вернул:

File "/usr/local/bin/apt", line 6
    print "apt"
              ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("apt")?

Я мог выполнять другие команды, такие как sudo apt-get … и т. д.

Может кто-то подсказать, в чем проблема?

Редактировать: Спасибо Джошуа Джонс, steeldriver и ванадию за помощь. Я сделал следующее, чтобы проверить:

$ ls -l /usr/bin/python
/usr/bin/python -> /etc/alternatives/python
$ ls -l /etc/alternatives/python
/etc/alternatives/python -> /usr/bin/python3
$ ls -l /usr/bin/python3
/usr/bin/python3 -> python3.6
$ ls -l /usr/bin/python2
/usr/bin/python2 -> python2.7
$ which python3 /usr/local/bin/python3
$ ls -l /usr/local/bin/python3
/usr/local/bin/python3 -> python3.9

Дополнительно к @ванадию, когда вы хотите установить последнюю версию python на своем компьютере, всегда проверяйте дату выпуска как python, так и Ubuntu. Лучше обновить Ubuntu до последней версии, не нарушая работу всего остального. Например, python 3.9 был выпущен 5 октября 2020 года, в то время как Ubuntu 18.04 был выпущен 26 июля 2018 года. В данный момент вам придется ждать Ubuntu 22.04, который, скорее всего, будет иметь python 3.9 по умолчанию. Надеюсь, вы теперь поняли.

Я использую PPA deadsnakes для безопасной установки последнего python на Ubuntu 18.04 (20.04 устанавливает 3.8, но в его официальном репозитории есть 3.9), не перезаписывая существующий системный python. Смотрите этот гист для подробностей: https://gist.github.com/plembo/6bc141a150cff0369574ce0b0a92f5e7. Обратите внимание, что мой рабочий процесс не требует последнего python для всей системы, поэтому я всегда добавляю флаг “–user” при установке дополнительных библиотек с помощью pip.

Ответ или решение

После установки Python 3.9.6 на Ubuntu 18.04 у вас возникла проблема с выполнением команды sudo apt update, которая возвращает ошибку SyntaxError: Missing parentheses in call to 'print'. Давайте разберем, что произошло, и как это можно исправить.

Проблема

Ошибка, с которой вы столкнулись, связана с несовместимостью версий Python. По умолчанию, Ubuntu 18.04 использует Python 3.6 как системный интерпретатор для утилит, таких как apt. Когда вы установили Python 3.9.6 с помощью команды sudo make install, в систему был установлен новый интерпретатор, который, вероятно, перезаписал символическую ссылку для команды python, что привело к тому, что утилита apt теперь ссылается на некорректную версию Python.

Анализ

Исходя из вашей инструкции, утилита apt находится по пути /usr/local/bin/apt, а ошибки в этом файле указывают, что она была написана для Python 2. На вашем компьютере имеется несколько версий Python:

  • Python 3.6.9, который является системным интерпретатором
  • Python 2.7.17
  • Python 3.9.6, установленный вами

Решение

  1. Не переписывайте системный Python: Важно помнить, что на системах на базе Ubuntu Python 2.7 и Python 3.6 используются для выполнения критических системных утилит. Всегда рекомендуется устанавливать новые версии Python в отдельный каталог (например, /usr/local/bin/python3.9) или использовать PPA (личные пакеты), чтобы избежать конфликтов.

  2. Исправьте используемую версию Python для apt:

    • Убедитесь, что утилита apt ссылается на правильную версию Python. Вы можете отредактировать файл /usr/local/bin/apt, изменив первую строку на:
      #!/usr/bin/env python3

      или на используемую системную версию Python (например, python3.6), чтобы она корректно работала.

  3. Восстановите оригинальную настройку: Если вы хотите вернуть все на свои места, вы можете переустановить Python 3.6:

    sudo apt-get install --reinstall python3
  4. Используйте PPA для установки Python: Как вы уже заметили в своих источниках, использование Deadsnakes PPA – это безопасный способ установки новых версий Python, не затрагивая системные утилиты. Для установки Python 3.9 через PPA выполните следующие команды:

    sudo add-apt-repository ppa:deadsnakes/ppa
    sudo apt update
    sudo apt install python3.9

Заключение

Важно понимать, что системы на базе Linux (особенно Ubuntu) зависят от версии Python, и любое неосторожное обновление может вызвать серьезные проблемы. Если вы часто работаете с различными версиями Python, рекомендуется использовать инструменты управления версиями, такие как pyenv, которые позволяют легко переключаться между версиями без вмешательства в системный Python. Надеюсь, с этой информацией вы сможете решить вашу проблему и избежать ее в будущем.

Оцените материал
Добавить комментарий

Капча загружается...