- Создана универсальная роль Python для установки Python 3.12 на всех ОС - Восстановлена роль Docker из git истории - Исправлены все ошибки линтера - Обновлен deploy.yml с правильным порядком ролей: devops → python → docker - Удалена устаревшая роль ping - Добавлена поддержка альтернативных репозиториев для старых ОС Автор: Сергей Антропов Сайт: https://devops.org.ru
8.2 KiB
Роль 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- путь к исполняемому файлу Pythonpython_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 в репозитории проекта.