(Wheel 格式) Python 的标准分发格式的生成规则规范

.whl 文件(Wheel 格式)是 Python 的标准分发格式,其生成规则主要遵循以下规范:


1. 文件名命名规则

.whl 文件名格式为:

复制代码
{distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl

例如:numpy-1.22.3-cp39-cp39-win_amd64.whl

  • distribution :包名(如 numpy
  • version :版本号(如 1.22.3
  • build tag(可选):构建编号(通常省略)
  • python tag :支持的 Python 版本(如 cp39 表示 CPython 3.9)
  • abi tag :ABI 兼容性标记(如 nonecp39
  • platform tag :平台标记(如 win_amd64linux_x86_64any

2. 核心生成规则

(1)依赖工具

必须安装 setuptoolswheel

bash 复制代码
pip install setuptools wheel
(2)项目结构要求
复制代码
my_package/
├── setup.py          # 必须
├── pyproject.toml    # (可选,现代项目推荐)
└── my_package/       # 包目录
    ├── __init__.py   # 必须(标识为 Python 包)
    └── module.py     # 你的代码
(3)setup.py 关键配置
python 复制代码
from setuptools import setup

setup(
    name="my_package",       # 包名(必须)
    version="0.1",           # 版本号(必须)
    packages=["my_package"], # 包含的包(或使用 find_packages())
    python_requires=">=3.6", # Python 版本要求(可选)
    install_requires=[],     # 依赖项(可选)
)
(4)生成命令
bash 复制代码
python setup.py bdist_wheel  # 生成 whl 文件到 dist/ 目录

或使用现代构建工具:

bash 复制代码
pip install build
python -m build --wheel      # 推荐方式(需 pyproject.toml)

3. 平台与兼容性标记

  • 纯 Python 包 :标记为 py3-none-any.whl
    (适用于所有 Python 版本和平台)
  • 平台特定包 :如 cp39-cp39-win_amd64.whl
    (需编译 C 扩展,依赖特定 Python 版本和操作系统)

4. pyproject.toml(现代项目推荐)

toml 复制代码
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "my_package"
version = "0.1"

5. 验证生成的 whl

检查文件内容:

bash 复制代码
unzip -l dist/my_package-0.1-py3-none-any.whl

应包含:

  • 包代码(如 my_package/__init__.py
  • 元数据(如 *.dist-info/ 目录)

6. 注意事项

  1. 避免顶层代码setup.py 中不应有业务逻辑,仅用于配置。
  2. 版本号规范 :遵循 PEP 440(如 1.0.02.1.0rc1)。
  3. 跨平台 :纯 Python 包用 any 标记,C 扩展需分平台编译。

通过以上规则,可以生成符合标准的 .whl 文件,并通过 pip install 分发或安装。

相关推荐
RPGMZ5 分钟前
RPGMakerMZ 地图存档点制作 标题继续游戏直接读取存档
开发语言·javascript·游戏·游戏引擎·rpgmz·rpgmakermz
丑八怪大丑13 分钟前
JDK8-17新特性
java·开发语言
书源丶24 分钟前
三十五、Java 泛型——类型安全的「万能模板」
java·开发语言·安全
EF@蛐蛐堂36 分钟前
【js】浏览器滚动条优化组件OverlayScrollbars
开发语言·javascript·ecmascript
2301_8125396741 分钟前
Golang怎么实现网页爬虫抓取数据_Golang如何用colly框架快速构建爬虫采集程序【教程】
jvm·数据库·python
xcbrand41 分钟前
政府事业机构品牌策划公司哪家可靠
大数据·人工智能·python
代码中介商1 小时前
C++ 仿函数(Functor)深度解析:从基础到应用
开发语言·c++
小杍随笔1 小时前
Rust桌面GUI框架:性能优化与实战避坑指南
开发语言·性能优化·rust
二哈赛车手1 小时前
新人笔记---项目中简易版的RAG检索后评测指标(@Recall ,Mrr..)实现
java·开发语言·笔记·spring·ai
格林威1 小时前
3D相机视觉检测:环境光太强,结构光点云全是噪点怎么办?
开发语言·人工智能·数码相机·计算机视觉·3d·视觉检测·工业相机