Роль 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" для получения детальной информации о процессе установки.
Обработка ошибок
Роль включает проверки на каждом этапе:
- Проверка наличия Python перед установкой
- Проверка успешности установки
- Проверка работоспособности pip
- Очистка временных файлов
Производительность
- Использует параллельную компиляцию (количество ядер 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 в репозитории проекта.