Python Wheel 文件解释 | AI生成和翻译
问题:Python 打包中的 .whl (wheel) 文件是什么?
答案:
** .whl** 文件(发音为“wheel”)是 Python 包的标准二进制分发格式,由 PEP 427 引入。它是旧版 .egg 格式的后继者,旨在比从源压缩包(.tar.gz)安装更快、更可靠。
wheel (.whl) 相较于源分发的主要优势
- 预构建和预编译 — 安装过程中无需编译 C 扩展或运行
setup.py(速度更快,尤其是在 Windows 上)。 - 纯 Python 或平台特定 — Wheel 可以是纯 Python 的(适用于任何地方),也可以是为特定 OS/CPU 架构构建的(例如,manylinux、macOS、Windows)。
- 确定性和可缓存 — 文件包含所需的一切,因此安装是可重现的,并且 pip 可以高效地缓存它们。
Wheel 文件名约定
典型的 wheel 文件名如下所示:
package_name-version-py3-none-any.whl
# 或
package_name-1.2.3-cp39-cp39-manylinux_2_28_x86_64.whl
标签分解:
package_name:包的名称version:版本号(例如,1.2.3)cp39:Python 版本标签 (cp39 = Python 3.9, py3 = 任意 Python 3,等等)none或cp39:ABI 标签(应用程序二进制接口)any:平台标签,表示纯 Python(适用于任何平台)manylinux_2_28_x86_64,win_amd64,macosx_11_0_arm64等:特定平台标签
常见的 wheel 类型
| 类型 | 示例标签 | 含义 |
|---|---|---|
| 纯 Python | py3-none-any |
无编译代码,适用于任何地方 |
| 平台特定二进制 | cp311-cp311-win_amd64 |
为 Python 3.11 在 64 位 Windows 上构建 |
| manylinux (Linux) | manylinux_2_28_x86_64 |
兼容大多数现代 Linux 发行版 |
| macOS universal/arm | macosx_11_0_arm64 或 universal2 |
Intel 或 Apple Silicon Mac |
pip 如何使用 wheels
当你运行 pip install package_name 时:
- pip 首先在 PyPI 上查找兼容的
.whl。 - 如果存在合适的 wheel,它会直接下载并安装(非常快)。
- 只有当没有可用的 wheel 时,pip 才会回退到源分发(
.tar.gz)并在本地构建它。
构建自己的 wheels
你可以使用以下命令为你的项目创建 wheel:
python -m build # 推荐 (同时创建 sdist 和 wheel)
# 或旧方式:
python setup.py bdist_wheel # 已弃用
构建后,wheels 存储在 dist/ 目录中。
简而言之:** .whl 文件是现代、快速的二进制包格式,pip 在可能的情况下会优先使用它们。**
*PEP 427 – Wheel 二进制包格式
*Python Packaging 用户指南 – Wheel