Files
DevOpsLab/roles/python/README.md
Сергей Антропов 0b4efd9ca1 feat: Добавлена роль Python 3.12 и восстановлена роль Docker
- Создана универсальная роль Python для установки Python 3.12 на всех ОС
- Восстановлена роль Docker из git истории
- Исправлены все ошибки линтера
- Обновлен deploy.yml с правильным порядком ролей: devops → python → docker
- Удалена устаревшая роль ping
- Добавлена поддержка альтернативных репозиториев для старых ОС

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-27 22:08:37 +03:00

8.2 KiB
Raw Blame History

Роль Python 3.12

Универсальная Ansible роль для установки Python 3.12 на различных дистрибутивах Linux.

Автор: Сергей Антропов
Сайт: https://devops.org.ru

Описание

Эта роль обеспечивает универсальную установку Python 3.12 на различных дистрибутивах Linux, включая:

  • Ubuntu (20.04, 22.04, 24.04)
  • Debian (10, 11, 12)
  • CentOS (7, 8, 9)
  • RHEL (7, 8, 9)
  • Rocky Linux (8, 9)
  • AlmaLinux (8, 9)
  • Fedora (35+)
  • openSUSE (15.3+)

Роль автоматически определяет дистрибутив и использует соответствующий метод установки:

  • Установка из пакетов (если доступно)
  • Компиляция из исходного кода (если пакеты недоступны)
  • Автоматическое обновление pip до последней версии
  • Создание символических ссылок для удобства использования
  • Поддержка виртуальных окружений

Требования

  • Ansible >= 2.9
  • Python 2.7 или 3.5+ на управляющей машине
  • Привилегии sudo на целевых хостах

Переменные

Основные переменные

Переменная По умолчанию Описание
python_version "3.12" Версия Python для установки
python_packages ["pip", "setuptools", "wheel", "virtualenv"] Дополнительные пакеты Python
python_install_prefix "/usr/local" Префикс для установки Python
python_create_symlinks true Создание символических ссылок
python_update_pip true Автоматическое обновление pip до последней версии
python_pip_packages [] Дополнительные pip пакеты
python_create_venv false Создание виртуального окружения
python_venv_path "/opt/python-venv" Путь для виртуального окружения
python_setup_alternatives true Настройка альтернатив (RHEL)
python_remove_old_versions false Удаление старых версий Python
python_log_level "INFO" Уровень логирования

Переменные для разных ОС

Роль автоматически определяет переменные на основе ansible_os_family и ansible_distribution:

  • python_current_packages - пакеты Python для текущей ОС
  • python_current_build_deps - системные зависимости для компиляции
  • python_current_package_manager - менеджер пакетов
  • python_current_executable - путь к исполняемому файлу Python
  • python_current_pip - путь к pip

Примеры использования

Базовое использование

- hosts: all
  roles:
    - python

С дополнительными пакетами

- hosts: all
  vars:
    python_pip_packages:
      - requests
      - flask
      - django
    python_create_venv: true
    python_venv_path: "/opt/myapp-venv"
  roles:
    - python

С компиляцией из исходного кода

- hosts: all
  vars:
    python_install_prefix: "/opt/python3.11"
    python_create_symlinks: true
  roles:
    - python

Для конкретной версии Python

- hosts: all
  vars:
    python_version: "3.12.0"
  roles:
    - python

Поддерживаемые дистрибутивы

Debian/Ubuntu

Роль использует репозиторий deadsnakes для установки Python 3.12:

- hosts: ubuntu_servers
  roles:
    - python

RHEL/CentOS/Rocky/AlmaLinux

Роль использует EPEL репозиторий для установки Python 3.12:

- hosts: rhel_servers
  roles:
    - python

Fedora

- hosts: fedora_servers
  roles:
    - python

openSUSE

- hosts: suse_servers
  roles:
    - python

Альтернативные репозитории

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

RHEL/CentOS 7

  • IUS Repository: Предоставляет современные версии Python
  • SCL (Software Collections): Для очень старых систем
  • EPEL: Дополнительные пакеты

Debian/Ubuntu старых версий

  • deadsnakes PPA: Предоставляет Python 3.12 для старых версий
  • Альтернативные пакеты: Python 3.11 если 3.12 недоступен

Автоматическое переключение

Роль автоматически пытается установить Python 3.12, а если это невозможно, переключается на доступную версию (3.11) или использует альтернативные репозитории.

Структура роли

roles/python/
├── defaults/
│   └── main.yml          # Переменные по умолчанию
├── handlers/
│   └── main.yml          # Обработчики событий
├── meta/
│   └── main.yml          # Метаданные роли
├── tasks/
│   └── main.yml          # Основные задачи
├── vars/
│   └── main.yml          # Переменные для разных ОС
└── README.md             # Документация

Логирование

Роль поддерживает подробное логирование. Установите python_log_level: "DEBUG" для получения детальной информации о процессе установки.

Обработка ошибок

Роль включает проверки на каждом этапе:

  1. Проверка наличия Python перед установкой
  2. Проверка успешности установки
  3. Проверка работоспособности pip
  4. Очистка временных файлов

Производительность

  • Использует параллельную компиляцию (количество ядер CPU)
  • Оптимизированная конфигурация Python с LTO
  • Кэширование пакетов
  • Очистка временных файлов

Безопасность

  • Проверка целостности загружаемых файлов
  • Использование официальных репозиториев
  • Минимальные привилегии для установки

Устранение неполадок

Python не найден после установки

# Проверьте символические ссылки
ls -la /usr/bin/python3*

# Обновите библиотеки
sudo ldconfig

Ошибки компиляции

# Установите системные зависимости
sudo apt install build-essential  # Ubuntu/Debian
sudo dnf groupinstall "Development Tools"  # RHEL/CentOS

Проблемы с pip

# Обновите pip
python3 -m pip install --upgrade pip

# Проверьте версию
pip3 --version

Лицензия

MIT

Автор

Сергей Антропов
Сайт: https://devops.org.ru

Поддержка

Для получения поддержки или сообщения об ошибках, пожалуйста, создайте issue в репозитории проекта.