Что такое Python Wheels?

Ответ

Python Wheels (.whl) — это стандартный формат бинарного дистрибутива для пакетов Python, предназначенный для ускорения и упрощения установки. В отличие от исходных дистрибутивов (sdist), Wheels содержат предварительно скомпилированные файлы, что устраняет необходимость компиляции на стороне пользователя.

Основные преимущества:

  • Быстрая установка: Отсутствие необходимости компиляции C-расширений или других нативных компонентов значительно сокращает время установки.
  • Меньше зависимостей: Для установки пакета не требуется наличие компилятора (например, GCC) или других специфических инструментов сборки на целевой системе.
  • Кросс-платформенность: Поддерживают различные платформы и версии Python через специальные теги (например, manylinux, win_amd64, py3-none-any), что позволяет создавать универсальные или специфические для ОС дистрибутивы.
  • Надежность: Уменьшают вероятность ошибок, связанных с компиляцией или отсутствием необходимых зависимостей сборки.

Пример создания Wheel:

Для создания Wheel-файла из вашего пакета, убедитесь, что у вас установлен пакет wheel, а затем используйте setuptools:

pip install wheel
python setup.py bdist_wheel

Это создаст файл .whl в директории dist/.

Установка Wheel-файла:

pip автоматически предпочитает Wheels при установке пакетов. Если у вас есть локальный .whl файл, вы можете установить его так:

pip install package_name.whl

Wheels являются рекомендуемым способом дистрибуции для большинства Python-пакетов, особенно для тех, которые включают нативные расширения (например, NumPy, Pandas, SciPy).

Ответ 18+ 🔞

А, вот эта тема про эти ваши "колёса"! Ну, питонячий народ, блядь, вечно изобретает велосипед, а потом ещё и колёса к нему отдельно выдумывает. Слушай сюда, сейчас разжую.

Короче, есть у нас в Питоне такая штука — .whl файлы, они же "wheels", они же "колёса". Это, грубо говоря, уже готовый, собранный пакет, как полуфабрикат в магазине. Не надо тебе на своей кухне-компе компилятор включать, мучиться, как этот ваш pip install делает обычно. Хуяк — и готово.

И в чём, сука, профит, спросишь?

  • Ставится за секунды: Потому что всё уже скомпилировано. Никаких этих "building wheels for..." на полчаса, пока кофе остывает. Особенно это спасает с такими монстрами, как NumPy — без "колеса" он тебе пол-операционки на компиляцию сожрёт, а с ним — раз и встал.
  • Не нужно ставить кучу говна: Чтобы собрать пакет из исходников, тебе часто нужен компилятор C, всякие библиотеки-заголовки — пиздецовый геморрой. А с "колесом" — нихуя не нужно, только сам Питон. Красота!
  • Под любую платформу сделают: Умные дядьки уже приготовили "колёса" под твой Windows, Linux или Mac. В названии файла всё написано: win_amd64, manylinux, macosx_11_0_arm64 — сразу видно, твоё или нет. Есть и универсальные (py3-none-any), которые вообще везде катятся.
  • Надёжнее, блядь: Меньше шагов — меньше шансов, что на твоей кривой сборке что-то пойдёт не так и вылезет ошибка, от которой волосы дыбом встанут.

Ну и как, блядь, такое чудо сделать самому?

Допустим, ты написал свой супер-пакет. Чтобы не заставлять пользователей ебаться с компиляцией, сделай им "колесо". Сначала поставь инструмент:

pip install wheel

А потом, находясь в папке со своим setup.py, дай команду:

python setup.py bdist_wheel

И всё, ёпта! В папке dist/ появится твой красивый .whl файлик. Можно нести в народ.

Как поставить, если тебе дали такое "колесо"?

Да проще простого, pip их обожает. Скачал файл — и в терминале:

pip install путь_до_файла/package_name.whl

Он его схватит и моментально вкрутит. Вообще, pip сам, когда может, всегда старается найти и поставить именно "колесо", а не исходники. Потому что не дурак.

Короче, если твой пакет хоть что-то нативное (на C/C++) содержит — делай "колёса", не будь мудаком. Все серьёзные пацаны (numpy, pandas, scipy) так и делают. Это сейчас стандарт де-факто, чтобы людей не ебать понапрасну.