# Роль 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 ## Примеры использования ### Базовое использование ```yaml - hosts: all roles: - python ``` ### С дополнительными пакетами ```yaml - hosts: all vars: python_pip_packages: - requests - flask - django python_create_venv: true python_venv_path: "/opt/myapp-venv" roles: - python ``` ### С компиляцией из исходного кода ```yaml - hosts: all vars: python_install_prefix: "/opt/python3.11" python_create_symlinks: true roles: - python ``` ### Для конкретной версии Python ```yaml - hosts: all vars: python_version: "3.12.0" roles: - python ``` ## Поддерживаемые дистрибутивы ### Debian/Ubuntu Роль использует репозиторий `deadsnakes` для установки Python 3.12: ```yaml - hosts: ubuntu_servers roles: - python ``` ### RHEL/CentOS/Rocky/AlmaLinux Роль использует EPEL репозиторий для установки Python 3.12: ```yaml - hosts: rhel_servers roles: - python ``` ### Fedora ```yaml - hosts: fedora_servers roles: - python ``` ### openSUSE ```yaml - 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 не найден после установки ```bash # Проверьте символические ссылки ls -la /usr/bin/python3* # Обновите библиотеки sudo ldconfig ``` ### Ошибки компиляции ```bash # Установите системные зависимости sudo apt install build-essential # Ubuntu/Debian sudo dnf groupinstall "Development Tools" # RHEL/CentOS ``` ### Проблемы с pip ```bash # Обновите pip python3 -m pip install --upgrade pip # Проверьте версию pip3 --version ``` ## Лицензия MIT ## Автор **Сергей Антропов** Сайт: https://devops.org.ru ## Поддержка Для получения поддержки или сообщения об ошибках, пожалуйста, создайте issue в репозитории проекта.