Какие файлы являются двоичными в 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
. Сравните, например, с Numpynumpy-1.21.4-cp310-cp310-win_amd64.whl
(содержит бинарные модули для CPython 3.10 под Windows, архитектура AMD64).Если есть другие двоичные данные пакета, например, изображение, которое требует пакет, они тоже будут в .whl. Для Django, скорее всего, вы найдете файлы Gettext
.mo
.Если python wheel распространяет двоичный файл, то как дистрибутив wheel гарантирует, что двоичный файл собран из того же исходного кода, который присутствует в .whl файле?
Исходный код для бинарных модулей обычно не включается в .whls.