You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用setuptools和pyproject.toml打包单模块并附带py.typed文件?

解决方案

方法1:通过data_files配置安装py.typed

保持单文件项目结构不变:

sample.py
py.typed
pyproject.toml

修改pyproject.toml,在[project]区块添加data_files配置,将py.typed安装到与模块相同的site-packages根目录:

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "sample"
version = "0.1.0"
requires-python = ">=3.8"
# 按需添加作者、描述等其他元信息

# 空字符串表示将文件安装到site-packages根目录
data_files = [("", ["py.typed"])]

# 指定要打包的单文件模块
[tool.setuptools]
py-modules = ["sample"]

打包安装后,sample.py和py.typed会共存于site-packages根目录,既支持直接from sample import whatever导入,类型检查工具也能识别到类型提示配置。

方法2:利用include-package-data与package-data

无需创建子目录,借助setuptools对单文件模块的隐含包处理,配置package-data包含py.typed:

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "sample"
version = "0.1.0"
requires-python = ">=3.8"
# 按需添加其他元信息

[tool.setuptools]
py-modules = ["sample"]
include-package-data = true

# 空键表示匹配所有包(单文件模块会被视为根包的一部分)
[tool.setuptools.package-data]
"" = ["py.typed"]

这种配置的最终安装效果和方法1完全一致,同样满足直接导入的需求。

验证方式

安装完成后,可检查site-packages目录确认sample.py和py.typed是否共存;同时用mypy等类型检查工具测试,验证类型提示配置是否生效。

内容的提问来源于stack exchange,提问作者Raúl Núñez de Arenas Coronado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 04:12:03