Wheel
- wheel (.whl)
- это готовый собранный python пакет, предназначенный для быстрой установки библиотек без необходимости сборки исходного кода.
Wheel является стандартным форматом бинарных python пакетов.
Зачем нужен wheel
Без wheel установка python пакета может выглядеть так:
Это создает проблемы:
- установка медленнее
- нужны build tools
- возможны ошибки компиляции
- разные OS требуют разные зависимости
Wheel решает эти проблемы.
Как работает
Когда выполняется:
pip пытается:
- найти wheel пакет
- скачать готовый
.whl - распаковать его
- установить файлы
Если wheel отсутствует — pip пытается собрать пакет из исходников.
Что такое .whl
Файл wheel имеет расширение:
Например:
Что означает имя wheel файла
requests
Название пакета.
2.32.3
Версия пакета.
py3
Поддерживаемая версия Python.
none-any
Совместимость с платформами и архитектурами.
Установка wheel пакета
Установка локального wheel файла
Установка из директории
Создание wheel пакета
Установка build tools
Сборка wheel
После выполнения появится директория:
Внутри:
Что находится внутри wheel
Wheel — это zip архив.
Внутри находятся:
- python файлы
- metadata
- зависимости
- compiled binaries
- информация о версии пакета
Где используются wheel пакеты
PyPI
Большинство библиотек в PyPI распространяются как wheel.
CI/CD
Wheel позволяет:
- ускорять deployment
- ускорять build pipelines
- уменьшать ошибки сборки
Docker
Wheel часто используется для ускорения docker builds.
Air-gapped environments
Wheel удобно использовать в закрытых сетях без доступа в интернет.
Что происходит внутри
Когда выполняется:
pip:
- открывает wheel архив
- проверяет metadata
- распаковывает файлы
- копирует package в site-packages
- регистрирует пакет
Wheel vs source package
| Формат | Что это |
|---|---|
.whl |
готовый бинарный пакет |
.tar.gz |
исходный код пакета |
Преимущества wheel
- быстрая установка
- не нужна компиляция
- меньше ошибок
- reproducible installs
- удобно для CI/CD
Недостатки wheel
- wheel может быть platform-specific
- иногда нужен отдельный wheel под каждую архитектуру
- не все пакеты публикуют wheel
Platform-specific wheel
Некоторые пакеты содержат compiled binaries.
Например:
Для них wheel может зависеть от:
- OS
- CPU architecture
- Python version
Universal wheel
Некоторые pure-python библиотеки имеют universal wheel:
Это означает:
- работает на любой OS
- не содержит compiled binaries
Best practices
Предпочитать wheel
Wheel устанавливается быстрее и стабильнее.
Использовать wheel в CI/CD
Позволяет ускорить pipelines.
Хранить internal wheel packages
В production компаниях часто используются внутренние wheel repositories.
Anti-patterns
Сборка пакетов на production сервере
Плохо:
Лучше:
Игнорирование platform compatibility
Некоторые wheel работают только на конкретной OS или архитектуре.
Типичные ошибки
Failed building wheel
Например:
Причины:
- отсутствуют build tools
- отсутствует compiler
- несовместимая OS
- неподдерживаемая версия Python
No matching distribution found
Причины:
- wheel отсутствует для данной платформы
- версия Python не поддерживается
- пакет несовместим с architecture
Unsupported wheel
Например:
Причина: wheel собран для другой OS или Python версии.
Полезные команды
Установить build tools
Собрать wheel
Установить wheel
Показать wheel файлы
Итог
- Wheel
- стандартный формат бинарных python пакетов.
Позволяет:
- ускорять установку библиотек
- избегать compilation errors
- упрощать CI/CD
- делать reproducible deployments
Wheel является важной частью современного Python ecosystem.