La documentación dice que Python Wheel es un formato de distribución binario. Para comprender la diferencia entre el código fuente y los binarios distribuidos dentro de una rueda de Python, estoy inspeccionando manualmente un archivo .whl del paquete django . El .whl específico que estoy viendo es este . Descomprimí el archivo de la rueda y el directorio de nivel superior del archivo se ve así:
. ├── Django-3.2.9.data ├── Django-3.2.9.dist-info └── django El archivo Django-3.2.9.data contiene un script llamado admin.py . La estructura de directorios para Django-3.2.9.dist-info se ve así:
. ├── AUTHORS ├── LICENSE ├── LICENSE.python ├── METADATA ├── RECORD ├── WHEEL ├── entry_points.txt └── top_level.txt El archivo WHEEL en este directorio parece contener información de la versión WHEEL que se usó para construir este .whl .
La estructura de directorios de nivel superior para el archivo django se ve así:
. ├── __init__.py ├── __main__.py ├── apps ├── bin ├── conf ├── contrib ├── core ├── db ├── dispatch ├── forms ├── http ├── middleware ├── shortcuts.py ├── template ├── templatetags ├── test ├── urls ├── utils └── views Aquí, excepto la carpeta bin , todos los demás archivos son archivos de código fuente que están presentes en el repositorio de django . Por lo tanto, supuse que la carpeta bin contendría archivos binarios del paquete. Sin embargo, la carpeta solo contiene otro archivo python llamado django-admin.py .
Por lo tanto, mi pregunta es:
(1) ¿La rueda de Python realmente contiene un binario? En caso afirmativo, ¿cómo ubicar el binario dentro del archivo .whl ?
(2) Si la rueda de python distribuye un binario, ¿cómo garantiza la distribución de la rueda que el binario se construya a partir del mismo código fuente presente en el archivo .whl ? Para esta pregunta, supongo que la integridad de fuente a binario se garantiza a través de sumas de verificación para cada archivo almacenado en el archivo Django-3.2.9.dist-info/RECORD . ¿Es eso correcto?
Por lo tanto, supuse que la carpeta bin contendría archivos binarios del paquete.
Eso es incorrecto. Django simplemente tiene un directorio bin , ya que alberga la herramienta de línea de comandos django-admin .
¿La rueda de Python realmente contiene un binario? En caso afirmativo, ¿cómo ubicar el binario dentro del archivo .whl?
Sí, si hay algo que necesita ser un binario compilado. Por ejemplo, una rueda NumPy tendría varios archivos .so (Linux/macOS) o .pyd (Windows) (módulos de extensión de Python). Su ubicación dentro del .whl depende del paquete.
Puede saber si un .whl contiene Pyt binario. .whl no contiene módulos binarios a partir del nombre: Django-3.2.9-py3-none-any.whl . Compare, por ejemplo, numpy-1.21.4-cp310-cp310-win_amd64.whl (que contiene módulos binarios para CPython 3.10 en Windows, arquitectura AMD64).
Si hay otros datos del paquete binario, como una imagen que requiere el paquete, eso también estaría en el .whl. Para Django, probablemente encontrará archivos Gettext .mo .
Si la rueda de python distribuye un binario, ¿cómo garantiza la distribución de la rueda que el binario se construya a partir del mismo código fuente presente en el archivo .whl?
El código fuente de los módulos binarios generalmente no se incluye en .whls.