当前位置: 首页 > news >正文

【Python学习笔记】whl包打包

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

1. 使用setup.py

├── 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
from setuptools import setup, find_packagessetup(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

my_package_demo/
├── pyproject.toml
├── README.md
├── src/
│   └── my_package/
│       ├── __init__.py
│       └── core.py
├── tests/
│   └── test_core.py
└── data/└── sample_data.txt
[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,可以这样写:

[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"]
pip install build
python -m build

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

# 构建系统配置
# 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"

http://www.dtcms.com/a/352848.html

相关文章:

  • 【Redis#7】Redis 数据结构 -- Set 类型
  • AV1到达开始和约束时间
  • 如何避免绕过WAF 直接访问云主机
  • 从 WPF 到 Avalonia 的迁移系列实战篇1:依赖属性的异同点与迁移技巧
  • 学术/报告场景实测:从申请OpenAI API Key获取并实现GPT-5 PDF分析机器人(含源码)
  • 【Linux】从0到1掌握进程控制:终止、等待与替换的核心逻辑
  • 音频中的噪音门
  • 视频加水印_带gif 加动态水印 gif水印 视频浮动水印
  • 2025年03月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 《MongoDB 常用命令详解:从数据库操作到高级查询》
  • mongodb influxdb
  • Vue JS安装部署与使用方法(保姆级教程)
  • Java 实现 MongoDB ObjectId 算法
  • Python常见设计模式3: 行为型模式
  • 数据分析与数据挖掘
  • 【技术教程】如何为ONLYOFFICE协作空间开发文件过滤UI插件
  • string类的学习及模拟
  • vue拖动排序,vue使用 HTML5 的draggable拖放 API实现内容拖并排序,并更新数组数据
  • 【无标题】淘宝直播间详情数据
  • 云原生安全架构设计与零信任实践
  • 三格电子——高频一体式工业级RFID读写器的应用
  • 核心内涵解析:销采一体化 CRM 是什么?
  • 贴片式TE卡 +北京君正+Rk瑞芯微的应用
  • 亚马逊ASIN定投广告的智能化突破:从人工苦力到数据驱动的华丽转身
  • Part 1️⃣:相机几何与单视图几何-第六章:相机模型
  • Android中点击链接跳转到对应App页面的底层原理
  • Linux 云服务器日志清理自动化方法
  • 第二阶段Winfrom-8:特性和反射,加密和解密,单例模式
  • 点评项目(Redis中间件)第一部分Redis基础
  • golang 12 package 和 module