(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 兼容性标记(如 none、cp39)
  • platform tag :平台标记(如 win_amd64、linux_x86_64、any)

2. 核心生成规则

(1)依赖工具

必须安装 setuptools 和 wheel:

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.0、2.1.0rc1)。
  3. 跨平台 :纯 Python 包用 any 标记,C 扩展需分平台编译。

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

相关推荐
程序员果子20 分钟前
本体构建方法
人工智能·python·知识图谱·agent框架·本体
老秦包你会37 分钟前
计算机网络第二课 ----Socket(套接字)编程预备
开发语言·计算机网络·php
旖旎夜光39 分钟前
【C++ 基础入门】C++多态(下):单/多继承虚表、多态补充与 21 道高频题
开发语言·c++·笔记·学习
天天被压力1 小时前
【A股分钟级高频数据完全手册 #11】券商实时行情数据接口:实时交易(券商源)接入与字段
java·人工智能·python
总裁余(余登武)1 小时前
【python项目】:1操作EXCEl自动化开发
python·自动化·excel
芝梵家电数据笔记1 小时前
用字段表核对暖菜板长期使用条件:结构、暖区、质保边界
python·家电·数据校验·dataclass·选购
天天被压力1 小时前
【A股分钟级高频数据完全手册 #12】股票五档盘口数据接口:买卖五档实时盘口解析
java·人工智能·python
Wang's Blog10 小时前
Java 项目实战: 交友项目 - FastDFS:入门案例
java·开发语言·交友
apcipot_rain11 小时前
C++转Java日记(03)
java·开发语言·c++
布莱克60511 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map