Какие файлы являются двоичными в 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.