Вопрос или проблема
Я не знал, что Python 3.6 уже был установлен каким-то пакетом до того, как я установил Python 3.9.6 на свою систему.
Я следовал шагам, указанным по адресу https://phoenixnap.com/kb/how-to-install-python-3-ubuntu#ftoc-heading-7
-
sudo apt update
-
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
-
cd /tmp
-
wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz
-
tar -xf Python-3.9.6.tgz
-
cd python-3.9.6
-
./configure --enable-optimizations
-
(Перезаписать установленный 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
, установленный вами
Решение
-
Не переписывайте системный Python: Важно помнить, что на системах на базе Ubuntu Python 2.7 и Python 3.6 используются для выполнения критических системных утилит. Всегда рекомендуется устанавливать новые версии Python в отдельный каталог (например,
/usr/local/bin/python3.9
) или использовать PPA (личные пакеты), чтобы избежать конфликтов. -
Исправьте используемую версию Python для
apt
:- Убедитесь, что утилита
apt
ссылается на правильную версию Python. Вы можете отредактировать файл/usr/local/bin/apt
, изменив первую строку на:#!/usr/bin/env python3
или на используемую системную версию Python (например,
python3.6
), чтобы она корректно работала.
- Убедитесь, что утилита
-
Восстановите оригинальную настройку: Если вы хотите вернуть все на свои места, вы можете переустановить Python 3.6:
sudo apt-get install --reinstall python3
-
Используйте 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. Надеюсь, с этой информацией вы сможете решить вашу проблему и избежать ее в будущем.