Вопрос или проблема
Какой конкретный синтаксис необходимо изменить или добавить в приведенное ниже, чтобы команды, вызывающие
python
в виртуальной машине RHEL7, интерпретировались с использованием Python3, НЕ нарушая работу таких программ, какyum
, которые требуют Python2?
ПЕРВАЯ ПОПЫТКА:
Наша первая попытка заключалась в добавлении следующих 2 строк в самый конец скрипта инициализации cloud-init
, который создает виртуальную машину:
rm /usr/bin/python
ln -s /usr/bin/python3 /usr/bin/python
ОШИБКА, КОТОРАЯ ПОЯВИЛАСЬ:
Проблема в том, что добавление вышеуказанных двух строк в конец скрипта инициализации cloud-init
приводит к сбоям команд yum
, когда yum
вызывается впоследствии следующим образом:
$ sudo yum update -y
File "/bin/yum", line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax
$
ПЕРЕКЛЮЧЕНИЕ ОШИБКИ:
Мы можем отключить ошибку, убрав вышеуказанные 2 строки из скрипта инициализации cloud-init
и создав новую замену виртуальной машины. Это изолирует источник проблемы, но у нас все равно остается проблема того, как по умолчанию установить python
в Python3, не нарушая работу таких приложений, как yum
.
Вот быстрое решение, которое вы можете использовать в экстренной ситуации:
sed -i 1s/python/python2/ /bin/yum
Я бы не стал использовать это как решение – оно создает несоответствие и также исправляет только yum
. Вполне могут быть и другие системы или инструменты, которые зависят от Python2. Просто мое мнение.
Ответ или решение
Чтобы сделать Python 3 по умолчанию в RHEL 7, не нарушая работу таких программ, как yum
, необходимо подойти к задаче с особой осторожностью. Проблема заключается в том, что yum
и многие другие системные инструменты зависят от Python 2. В то же время, отмеченная вами необходимость использовать Python 3 может возникать из-за потребности в современных библиотеках или новых возможностях языка.
Вот подробное решение, как сохранить совместимость и в то же время настраивать систему для работы с Python 3 в качестве стандартного интерпретатора для сценариев, которые вы разрабатываете:
Шаг 1: Установите Python 3
Для начала убедитесь, что у вас установлен Python 3. В RHEL 7 это можно сделать с помощью yum
:
sudo yum install python3
Шаг 2: Настройка альтернатив
Вместо того чтобы просто переименовывать или создавать символическую ссылку /usr/bin/python
, мы можем воспользоваться утилитой alternatives
, которая позволяет управлять несколькими версиями Python без ущерба для системных утилит. Это дает возможность установить Python 3 по умолчанию в определённых контекстах без вмешательства в системные вызовы для yum
.
sudo alternatives --set python /usr/bin/python3
Шаг 3: Обновите сценарии
Если вы пишете собственные сценарии или команды, которые требуют Python 3, вы можете явно указывать на использование Python 3 в заголовках ваших скриптов:
#!/usr/bin/env python3
Таким образом, ваши разработки будут работать с Python 3, не мешая другим системным инструментам.
Шаг 4: Использование virtualenv
Для изолированной работы с библиотеками и приложениями, требующими разные версии Python, можно использовать virtualenv
. Это особенно полезно в тех случаях, когда вы работаете с проектами, которые требуют специфичных пакетов:
sudo yum install python3-virtualenv
virtualenv -p python3 myenv
source myenv/bin/activate
Шаг 5: Проверка
После выполнения вышеуказанных шагов, вы можете проверить, какой именно интерпретатор Python установлен по умолчанию, запустив команду:
python --version
Это должно отобразить установленную версию Python 3.
Альтернативные решения
Если по какой-либо причине серьезные изменения системных вызовов нежелательны, то можно рассмотреть использование alias
в вашем ~/.bashrc
или ~/.bash_profile
. Это позволит вам использовать python
как python3
для вашей сессии:
echo "alias python=python3" >> ~/.bashrc
source ~/.bashrc
Заключение
Установив альтернативы и используя виртуальные окружения, вы сможете настраивать систему под свои нужды, при этом избегая разрушительных изменений, которые могут затронуть работу системных утилит, таких как yum
. Подход с явным указанием версий интерпретатора в ваших скриптах также обеспечивает чистоту и структурированность вашего кода.
Следуя этим рекомендациям, вы сможете успешно адаптировать вашу RHEL 7 систему к современным требованиям, сохраняя при этом стабильную работу критически важных системных инструментов.