Как установить другую версию Python, отличную от системной, на сервере с Astra Linux?

«Как установить другую версию Python, отличную от системной, на сервере с Astra Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

На production-серверах, особенно таких как Astra Linux, важно не ломать системный Python, от которого могут зависеть системные утилиты. Я решаю это с помощью pyenv или сборки из исходников с altinstall.

Рекомендуемый способ: использование pyenv.

  1. Установите зависимости:

    sudo apt update
    sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev
  2. Установите pyenv:

    curl https://pyenv.run | bash
    # Добавьте строки в ~/.bashrc, как указано в выводе команды, и выполните `source ~/.bashrc`.
  3. Установите нужную версию Python и используйте ее:

    pyenv install 3.9.15  # Устанавливаем конкретную версию
    pyenv global 3.9.15   # Делаем ее версией по умолчанию для пользователя
    python --version       # Проверяем

Альтернатива: установка из исходников (если pyenv недоступен).

wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz
tar -xzf Python-3.9.15.tgz
cd Python-3.9.15
./configure --enable-optimizations --prefix=/usr/local/python3.9
make -j$(nproc)
sudo make altinstall  # Ключевая команда! Установит как python3.9, не перезаписывая системные ссылки.
/usr/local/python3.9/bin/python3.9 --version

В CI/CD-пайплайнах я автоматизирую эту установку через Ansible-роль, которая настраивает pyenv и нужные версии Python на всех целевых хостах.