Какие файлы являются двоичными в python wheel?

В документации говорится, что Python Wheel - это формат распространения двоичных файлов. Чтобы понять разницу между исходным кодом и двоичными файлами, распространяемыми в Python wheel, я вручную проверяю .whl файл из пакета django. Конкретный .whl, который я рассматриваю, это this. Я распаковал файл wheel, и каталог верхнего уровня файла выглядит следующим образом:

.
├── Django-3.2.9.data
├── Django-3.2.9.dist-info
└── django

Файл Django-3.2.9.data содержит сценарий под названием admin.py. Структура каталогов для Django-3.2.9.dist-info выглядит следующим образом:

.
├── AUTHORS
├── LICENSE
├── LICENSE.python
├── METADATA
├── RECORD
├── WHEEL
├── entry_points.txt
└── top_level.txt

Файл WHEEL в этом каталоге, похоже, содержит информацию о версии WHEEL, которая была использована для построения этого .whl.

Структура каталогов верхнего уровня для файла django выглядит следующим образом:

.
├── __init__.py
├── __main__.py
├── apps
├── bin
├── conf
├── contrib
├── core
├── db
├── dispatch
├── forms
├── http
├── middleware
├── shortcuts.py
├── template
├── templatetags
├── test
├── urls
├── utils
└── views

Здесь, кроме папки bin, все остальные файлы являются файлами исходного кода, которые присутствуют на репозитории django. Поэтому я предположил, что папка bin будет содержать двоичные файлы пакета. Однако в папке содержится только еще один файл python с именем django-admin.py.

Итак, мой вопрос таков:

(1) Действительно ли python wheel содержит двоичный файл? Если да, то как найти двоичный файл в файле .whl?

(2) Если python wheel распространяет двоичный файл, то как дистрибутив wheel гарантирует, что двоичный файл собран из того же исходного кода, который присутствует в файле .whl? В этом вопросе я предполагаю, что целостность от исходного кода к бинарному обеспечивается посредством контрольных сумм для каждого файла, хранящегося в файле Django-3.2.9.dist-info/RECORD. Это верно?

Поэтому я предположил, что папка bin будет содержать двоичные файлы пакета.

Это неверно. Django просто имеет каталог bin, так как в нем находится инструмент командной строки django-admin..

Действительно ли python wheel содержит двоичный файл? Если да, то как найти двоичный файл в файле .whl?

Да, если есть что-то, что должно быть скомпилированным двоичным файлом. Например, колесо NumPy будет иметь несколько файлов .so (Linux/macOS) или .pyd (Windows) (модули расширения Python). Их расположение в .whl зависит от пакета.

По имени можно определить, содержит ли .whl бинарные модули Pyt .whl не содержит бинарные модули: Django-3.2.9-py3-none-any.whl. Сравните, например, с Numpy numpy-1.21.4-cp310-cp310-win_amd64.whl (содержит бинарные модули для CPython 3.10 под Windows, архитектура AMD64).

Если есть другие двоичные данные пакета, например, изображение, которое требует пакет, они тоже будут в .whl. Для Django, скорее всего, вы найдете файлы Gettext .mo.

Если python wheel распространяет двоичный файл, то как дистрибутив wheel гарантирует, что двоичный файл собран из того же исходного кода, который присутствует в .whl файле?

Исходный код для бинарных модулей обычно не включается в .whls.

Вернуться на верх