Ремонт среды Python на CentOS 7: устранение ошибок “команда не найдена” и ошибок библиотек

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

Этот пост касается этого вопроса, где меня попросили объяснить, как я установил python3 на своей системе. Я пытался установить python3 на своей системе для целей разработки. Что-то пошло не так, и теперь моя система не распознаёт ни стандартную установку python, ни установку python 3.4. Также такие программы, как yum, тоже сломаны.

sudo apt-get install curl git-core gcc make zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libssl-dev
sudo yum install scl-utils
sudo wget https://www.softwarecollections.org/en/scls/rhscl/python33/epel-7-x86_64/download/rhscl-python33-epel-7-x86_64.noarch.rpm
sudo yum install rhscl-python33-*.noarch.rpm

Также строка, которую я добавил и позже убрал из моего файла .bashrc, была следующей:

alias python='/opt/rh/python33/root/usr/bin/python3.3'

Теперь, оглядываясь назад, я предполагаю, что должно было быть “python3.4”, но в любом случае я предположил, возможно, неверно, что просто закомментировав эту строку, я убрал бы её эффект.

Правка:
Также, если память мне не изменяет, apt-get был неуместен, потому что я пытался установить его неправильным способом, поэтому мне не следовало его здесь упоминать.

Правка Добавлены выводы из команд:

Просто ввод “python” возвращает:

-bash: python: command not found 

which python даёт:

/usr/bin/which: no python in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/myusername/.local/bin:/home/myusername/bin) 

Однако установка python присутствует как в /usr/bin, так и в /usr/sbin.

alternatives --list | grep -i python даёт:

python  auto  /usr/bin/python3.4

-v python ничего не возвращает.

type -a python даёт:

-bash: type: python: not found

declare -p PATH выводит:

declare -x PATH="/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/myusername/.local/‌​bin:/home/myusername/bin"

У меня действительно присутствует /usr/bin/python:

$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 24 Jun 25 15:39 /usr/bin/python -> /etc/alternatives/python 

но:

$ ls -l $(readlink -f /usr/bin/python) даёт:

ls: cannot access /usr/bin/python3.4: No such file or directory

Я не знаю, имеет ли это значение, но /etc/alternatives/python выглядело розовым в терминале.

ls -l /usr/local/bin/` выводит `-rwxr-xr-x 1 root root   101 Sep  4  2014 2to3-3.4
-rwxr-xr-x 1 root root   241 Sep  4  2014 easy_install-3.4
-rwxr-xr-x 1 root root    99 Sep  4  2014 idle3.4
-rwxr-xr-x 1 root root   213 Sep  4  2014 pip3.4
-rwxr-xr-x 1 root root    84 Sep  4  2014 pydoc3.4
-rwxr-xr-x 2 root root 17544 Sep  4  2014 python3.4
-rwxr-xr-x 2 root root 17544 Sep  4  2014 python3.4m
-rwxr-xr-x 1 root root  3066 Sep  4  2014 python3.4m-config
-rwxr-xr-x 1 root root   236 Sep  4  2014 pyvenv-3.4

Также,

/opt/rh/python33/root/usr/bin/python3.3

Возвращает:

/opt/rh/python33/root/usr/bin/python3.3: error while loading shared libraries: libpython3.3m.so.1.0: cannot open shared object file: No such file or directory

Ваша система находится в непоследовательном состоянии, потому что вы не разделили проблемы Python 2.7 (/usr/bin/python на CentOS7) для системного использования и Python 3.5 для альтернативного использования, такого как программирование/скриптование. CentOS 7 зависит от того, чтобы /usr/bin/python был python2.7, и самый важный сценарий использования — управление пакетами Yum.

На чистой системе CentOS 7 вы бы установили Python 3.5 из Software Collections с помощью:

sudo yum install -y centos-release-scl
sudo yum install -y rh-python35

Чтобы активировать его, вы должны загрузить его окружение в своей оболочке:

. /opt/rh/rh-python35/enable

Тогда лучше использовать python3, чтобы запускать ваши скрипты портативным способом. (Примечание: /opt/rh/rh-python35/root/bin/python — это неудачный символьный линк.)

Конфигурация запуска enable также создаёт переменные окружения, такие как LD_LIBRARY_PATH, которые python3.5 нужен, чтобы найти общие библиотеки.

Чтобы выйти из путаницы, в которой находится ваша система, я бы начал с удаления символьных ссылок на python, указывающих на /etc/alternatives из /usr/bin.

Убедитесь, что /usr/bin/python2.7 является исполняемым файлом ELF LSB.
Воссоздайте необходимые символьные ссылки:
ln -s /usr/bin/python2.7 /usr/bin/python2
ln -s /usr/bin/python2 /usr/bin/python

Как только это будет работать, вы сможете снова использовать Yum.

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

Восстановление Python окружения на CentOS 7: устранение ошибок "команда не найдена" и ошибок библиотек

Работа с многими версиями Python на одном сервере требует внимательного управления, особенно на CentOS 7, где зависимости критически важны для работы системных инструментов, таких как yum. Когда система сталкивается с проблемой "команда не найдена" для Python, это часто указывает на то, что некорректно настроены символьные ссылки или существуют конфликты между разными версиями.

Шаг 1: Устранение неправильных символьных ссылок

На вашем сервере python указывает на /etc/alternatives/python, но python3.4 отсутствует, что приводит к ошибке. Прежде всего, удалите текущие символьные ссылки, чтобы избежать конфликтов. Выполните следующие команды в терминале:

sudo rm /usr/bin/python
sudo rm /etc/alternatives/python

Шаг 2: Восстановление Python 2.7

На CentOS 7 по умолчанию установлен Python 2.7, который является зависимостью для системы. Восстановите символические ссылки, чтобы отобразить корректный исполняемый файл Python 2.7:

sudo ln -s /usr/bin/python2.7 /usr/bin/python
sudo ln -s /usr/bin/python2.7 /usr/bin/python2

Шаг 3: Устранение проблем с Python 3.4

Поскольку у вас возникли проблемы с установкой Python 3.4, убедитесь, что вы правильно установили его. Рекомендуется использовать программное обеспечение из репозиториев Software Collections (SCL). Отключите текущие версии Python и выполните следующее:

sudo yum install centos-release-scl
sudo yum install rh-python33 # или rh-python35 для Python 3.5

Шаг 4: Включение окружения Python

Для работы с установленной версией Python необходимо включить её окружение:

scl enable rh-python33 bash

После выполнения этой команды командная строка будет использовать Python 3.3, и вы сможете вызывать python3 или python для запуска скриптов. Это создаст необходимые переменные окружения, включая LD_LIBRARY_PATH.

Шаг 5: Проверка состояния

После всех вышеуказанных настроек проверьте наличие установленных интерпретаторов:

which python
which python3

Команды должны вернуть пути к вашим установленным версиям Python. Попробуйте запустить python и убедитесь, что он корректно загружает интерпретатор.

Шаг 6: Восстановление yum и других системных инструментов

После выполнения всех шагов проверьте работоспособность yum, так как проблемы с Python могут привести к его сбоям. Выполните:

sudo yum clean all
sudo yum makecache

Если yum по-прежнему не работает, возможно, вам потребуется переустановить Python 2.7, так как он является критически важным для системы.

Вывод

Работа с несколькими версиями Python на одной системе может ввести в заблуждение, особенно при неправомерных изменениях переменных окружения и символических ссылок. Важно следовать правильным процедурам для установки и включения версий Python, чтобы избежать системных конфликтов. Придерживаясь указанных шагов, вы сможете восстановить ваше окружение к нормальному состоянию и продолжить разработку.

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

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