当前位置: 首页 > 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.xdnf.cn/news/1378261.html

相关文章:

  • Day14——JavaScript 核心知识全解析:变量、类型与操作符深度探秘
  • Redis实战-优惠券秒杀解决方案总结大全
  • XC6SLX75-2FGG484C Xilinx Spartan-6 LX FPGA
  • 电子电气架构 --- 软件项目复杂性的驾驭思路
  • 基于Prometheus Pushgateway与Alertmanager的自定义指标监控与告警实践指南
  • C语言 | 高级C语言面试题
  • C语言二级考试环境配置教程【window篇】
  • 数学建模——马尔科夫链(Markov Chain Model)
  • Linux初始——基础指令篇
  • 数据结构:从堆中删除元素 (Deleting from a Heap)
  • 微服务-30.配置管理-动态路由
  • 3 无重复字符的最长子串
  • 第二阶段Winfrom-8:特性和反射,加密和解密,单例模式
  • Gopher URL协议与SSRF二三事
  • 入门概念|Thymeleaf与Vue
  • 路由基础(二):路由表和FIB表
  • Day7--HOT100--54. 螺旋矩阵,48. 旋转图像,240. 搜索二维矩阵 II
  • 【JAVA实现websocket】
  • Java设计模式之《外观模式》
  • 大模型安全概述、LlamaFirewall
  • 深度学习---卷积神经网络CNN
  • Git-远程操作
  • AI-Agent 深度科普:从概念到架构、应用与未来趋势
  • JVM之【Java对象在内存中的结构】
  • Linux--->网络编程(TCP并发服务器构建:[ 多进程、多线程、select ])
  • Linux 系统调优与CPU-IO-网络内核参数调优
  • MySQL InnoDB vs MyISAM
  • 深度学习——卷积神经网络CNN(原理:基本结构流程、卷积层、池化层、全连接层等)
  • LeetCode - 反转链表 / K 个一组翻转链表
  • day2_softmax回归的实现 李沐动手学深度学习pytorch记录