Сделайте Python3 стандартным без нарушения работы yum в RHEL7

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

Какой конкретный синтаксис необходимо изменить или добавить в приведенное ниже, чтобы команды, вызывающие 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 систему к современным требованиям, сохраняя при этом стабильную работу критически важных системных инструментов.

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

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