【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"
相关推荐
aFakeProgramer23 分钟前
使用 ROS2 构建客户端-服务器通信:一个简单的计算器示例
开发语言·python·ros2
jinlei20091 小时前
在python 代码中调用rust 源码库操作步骤
开发语言·python·rust
yjx233321 小时前
并行多核体系结构基础——共享存储并行编程与针对链式数据结构的并行编程(笔记)
笔记
越前君2 小时前
如何开发一个 Raycast 扩展?
前端·笔记
mit6.8242 小时前
[Sync_ai_vid] 唇形同步评判器 | 图像与视频处理器 | GPU测试
人工智能·python
人生游戏牛马NPC1号2 小时前
学习 Android (十七) 学习 OpenCV (二)
android·opencv·学习
float_六七2 小时前
Apache Commons Lang 3
开发语言·python·apache
栒U2 小时前
从高层 PyTorch 到中层 CUDA Kernel 到底层硬件 Tensor Core
人工智能·pytorch·python
悠哉悠哉愿意2 小时前
【机器学习学习笔记】机器学习引言
笔记·学习·机器学习
精灵vector2 小时前
基于视觉的网页浏览Langraph Agent
python·aigc·ai编程