python 轮子中哪些文件是二进制文件?

Which files are binaries in a python wheel?

The documentation says that Python Wheel is a binary distribution format. To understand the difference between the source code and binaries distributed within a Python wheel, I am manually inspecting a .whl file from the package django. The specific .whl I am looking at is 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 文件似乎包含用于构建此 .whl 的 WHEEL 版本的信息。

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 repository上的源代码文件。因此,我的猜测是 bin 文件夹将包含包的二进制文件。但是,该文件夹仅包含另一个名为 django-admin.py.

的 python 文件

因此,我的问题是:

(1) python wheel 实际上包含一个二进制文件吗?如果是,那么如何在 .whl 文件中找到二进制文件?

(2) 如果 python wheel 分发二进制文件,那么 wheel 分发如何确保二进制文件是从 .whl 文件中存在的相同源代码构建的?对于这个问题,我的猜测是通过存储在 Django-3.2.9.dist-info/RECORD 文件中的每个文件的校验和来确保源到二进制的完整性。对吗?

Therefore, my guess was that the bin folder would contain binaries of the package.

这是不正确的。 Django 恰好有一个 bin 目录,因为它包含 the django-admin command line tool.

Does python wheel actually contain a binary? If yes, then how to locate the binary within the .whl file?

是的,如果有什么东西需要编译二进制。例如,一个 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(包含 Windows、AMD64 架构上 CPython 3.10 的二进制模块)。

如果有其他二进制包数据,例如包需要的图像,那也会在 .whl 中。对于 Django,您可能会找到 Gettext .mo 个文件。

If the python wheel distributes a binary, then how does wheel distribution ensure that the binary is built from the same source code present in the .whl file?

二进制模块的源代码通常不包含在 .whls 中。