【Python学习笔记】whl包打包

将python代码、文件、数据打成一个whl包,可以直接pip 安装到系统中,有两种方法:(1)setup.py;(2)pyproject.toml

1. 使用setup.py

bash 复制代码
├── CHANGELOG.md
├── README.md
├── build
│   ├── bdist.linux-x86_64
│   └── lib
├── ci.yml
├── dist
│   └── nvidia_modelopt-0.0.0-py3-none-any.whl
├── modelopt
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── __pycache__
│   ├── deploy
│   ├── onnx
│   └── torch
├── nvidia_modelopt.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   ├── requires.txt
│   └── top_level.txt
├── setup.py
└── test.py
python 复制代码
from setuptools import setup, find_packages

setup(
    name="nvidia-modelopt",
    packages=find_packages(),
    install_requires=["torch"],
    include_package_data=True,
    package_data={
        "modelopt": ["modelopt", "*", "**/*"],
    },
    extras_require={
        "torch": ["torch"],
    },
    description="modelopt for guanxing"
)

直接运行 python setup.py bdist_wheel 打包文件

2. 使用 pyproject.toml

bash 复制代码
my_package_demo/
├── pyproject.toml
├── README.md
├── src/
│   └── my_package/
│       ├── __init__.py
│       └── core.py
├── tests/
│   └── test_core.py
└── data/
    └── sample_data.txt
python 复制代码
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "my-package-demo"
version = "0.1.0"
description = "A demo Python package."
readme = "README.md"
authors = [
    { name = "Your Name", email = "you@example.com" }
]
requires-python = ">=3.7"
dependencies = []

[tool.hatch.build.targets.wheel]
# 明确指定要打包的包目录(src模式)
packages = ["src/my_package"]

# 如要包含额外的数据文件(可选)
include = [
    "src/my_package/**.py",
    "data/sample_data.txt"
]
  • [tool.hatch.build.targets.wheel].packages 指定只打包 src/my_package 下的包,不含其它目录。
  • include 显式指定只包含 src/my_package 目录下的 .py 文件和 data/sample_data.txt 数据文件,可精准控制(若只要包本身,可以省略或只写包目录)。

如果使用setuptools,可以这样写:

bash 复制代码
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "my-package-demo"
version = "0.1.0"
description = "A demo Python package."
readme = "README.md"
requires-python = ">=3.7"

[tool.setuptools]
package-dir = { "" = "src" }
packages = ["my_package"]
include-package-data = true

[tool.setuptools.package-data]
my_package = ["../data/sample_data.txt"]   # 注意路径调整

# 或者只包含py文件
# my_package = ["*.py"]
bash 复制代码
pip install build
python -m build

附一个比较全的pyproject.toml模版

bash 复制代码
# 构建系统配置
# PEP 517 规定的构建系统配置,指定构建工具和后端
[build-system]
# 构建时需要的依赖
requires = ["hatchling"]
# 构建后端,使用 hatchling 替代传统的 setuptools
build-backend = "hatchling.build"

# 项目元数据配置
# PEP 621 规定的项目核心元数据
[project]
# 项目名称,将用于发布和安装
name = "nvidia-modelopt"
# 项目版本,1.0.0 以上版本被视为正式发布版本
version = "0.1.0"
# 项目简介,不支持非英文字符
description = "Hello world"
# README 文件路径,用于生成长描述
readme = "README.md"
# Python 版本要求
requires-python = ">=3.10"
# 许可证信息
license = { text = "MIT" }
# 作者信息列表
authors = [
    { name = "xxx", email = "xxx" }
]
# 关键词,用于包索引和搜索
keywords = ["xx", "yy"]
# 项目分类,用于 PyPI 分类(如果项目不打算开源可以忽略)
# 完整分类列表:https://pypi.org/pypi?%3Aaction=list_classifiers
classifiers = [
    "Private :: Do Not Upload",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10"
]
# 项目依赖列表
dependencies = [
    "build>=1.0.3"
]

# 可选依赖配置,可通过 pip install package[test] 安装
[project.optional-dependencies]
# 测试相关依赖
test = [
    "pytest",
    "mock"
]

# 项目相关 URL 配置
[project.urls]
# 项目主页,通常是项目的 icode 地址
Homepage = "http:xxxx"
# 更新日志文件链接
Changelog = "CHANGELOG.md"

# 命令行入口点配置
[project.scripts]
# 格式:命令名 = 模块路径:函数名
modelopt = "modelopt.cmdline:main"

# Hatch 构建工具配置
[tool.hatch.build]
# 要包含的 Python 包
packages = ["modelopt"]
# 要包含的数据文件
# 支持通配符模式
# "modelopt": ["modelopt", "*", "**/*"],
include = [
    "modelopt",
    "modelopt/*"
]

# wheel 包构建配置
[tool.hatch.build.targets.wheel]
# 指定要打包的 Python 包
packages = ["modelopt"]
# wheel 包输出目录
output-dir = "output/dist"

# 源码包构建配置
[tool.hatch.build.targets.sdist]
# 源码包输出目录
output-dir = "output/dist"
相关推荐
数据智能老司机7 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机8 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机8 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机8 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i8 小时前
drf初步梳理
python·django
每日AI新事件8 小时前
python的异步函数
python
使一颗心免于哀伤8 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
这里有鱼汤9 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook18 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室18 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python