- Вопрос или проблема
- Ответ или решение
- Восстановление Python окружения на CentOS 7: устранение ошибок "команда не найдена" и ошибок библиотек
- Шаг 1: Устранение неправильных символьных ссылок
- Шаг 2: Восстановление Python 2.7
- Шаг 3: Устранение проблем с Python 3.4
- Шаг 4: Включение окружения Python
- Шаг 5: Проверка состояния
- Шаг 6: Восстановление yum и других системных инструментов
- Вывод
Вопрос или проблема
Этот пост касается этого вопроса, где меня попросили объяснить, как я установил 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, чтобы избежать системных конфликтов. Придерживаясь указанных шагов, вы сможете восстановить ваше окружение к нормальному состоянию и продолжить разработку.