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 中。
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
.
因此,我的问题是:
(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 中。