Перейти к содержанию

Wheel

wheel (.whl)
это готовый собранный python пакет, предназначенный для быстрой установки библиотек без необходимости сборки исходного кода.

Wheel является стандартным форматом бинарных python пакетов.


Зачем нужен wheel

Без wheel установка python пакета может выглядеть так:

source code -> compilation -> install

Это создает проблемы:

  • установка медленнее
  • нужны build tools
  • возможны ошибки компиляции
  • разные OS требуют разные зависимости

Wheel решает эти проблемы.


Как работает

Когда выполняется:

pip install requests

pip пытается:

  1. найти wheel пакет
  2. скачать готовый .whl
  3. распаковать его
  4. установить файлы

Если wheel отсутствует — pip пытается собрать пакет из исходников.


Что такое .whl

Файл wheel имеет расширение:

.whl

Например:

requests-2.32.3-py3-none-any.whl

Что означает имя wheel файла

requests-2.32.3-py3-none-any.whl

requests

Название пакета.


2.32.3

Версия пакета.


py3

Поддерживаемая версия Python.


none-any

Совместимость с платформами и архитектурами.


Установка wheel пакета

Установка локального wheel файла

pip install package.whl

Установка из директории

pip install ./dist/package.whl

Создание wheel пакета

Установка build tools

pip install build

Сборка wheel

python -m build

После выполнения появится директория:

dist/

Внутри:

dist/
├── package.whl
└── package.tar.gz

Что находится внутри 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 install package.whl

pip:

  1. открывает wheel архив
  2. проверяет metadata
  3. распаковывает файлы
  4. копирует package в site-packages
  5. регистрирует пакет

Wheel vs source package

Формат Что это
.whl готовый бинарный пакет
.tar.gz исходный код пакета

Преимущества wheel

  • быстрая установка
  • не нужна компиляция
  • меньше ошибок
  • reproducible installs
  • удобно для CI/CD

Недостатки wheel

  • wheel может быть platform-specific
  • иногда нужен отдельный wheel под каждую архитектуру
  • не все пакеты публикуют wheel

Platform-specific wheel

Некоторые пакеты содержат compiled binaries.

Например:

numpy
pandas
cryptography

Для них wheel может зависеть от:

  • OS
  • CPU architecture
  • Python version

Universal wheel

Некоторые pure-python библиотеки имеют universal wheel:

py3-none-any.whl

Это означает:

  • работает на любой OS
  • не содержит compiled binaries

Best practices

Предпочитать wheel

Wheel устанавливается быстрее и стабильнее.


Использовать wheel в CI/CD

Позволяет ускорить pipelines.


Хранить internal wheel packages

В production компаниях часто используются внутренние wheel repositories.


Anti-patterns

Сборка пакетов на production сервере

Плохо:

production -> compile source -> install

Лучше:

build server -> wheel -> production

Игнорирование platform compatibility

Некоторые wheel работают только на конкретной OS или архитектуре.


Типичные ошибки

Failed building wheel

Например:

Failed building wheel for cryptography

Причины:

  • отсутствуют build tools
  • отсутствует compiler
  • несовместимая OS
  • неподдерживаемая версия Python

No matching distribution found

Причины:

  • wheel отсутствует для данной платформы
  • версия Python не поддерживается
  • пакет несовместим с architecture

Unsupported wheel

Например:

is not a supported wheel on this platform

Причина: wheel собран для другой OS или Python версии.


Полезные команды

Установить build tools

pip install build

Собрать wheel

python -m build

Установить wheel

pip install package.whl

Показать wheel файлы

ls dist/

Итог

Wheel
стандартный формат бинарных python пакетов.

Позволяет:

  • ускорять установку библиотек
  • избегать compilation errors
  • упрощать CI/CD
  • делать reproducible deployments

Wheel является важной частью современного Python ecosystem.