使用Nuitka构建wheel包时如何包含py.typed文件?
解决Nuitka构建Wheel时包含py.typed文件的问题
问题场景
我正在使用Nuitka作为build backend构建基于pyproject.toml的Python项目wheel包,需要将包内的py.typed文件纳入最终产物,但尝试include-package-data和include-data-files的多种组合后均未成功。
仓库结构:
pyproject.toml my_package/ __init__.py my_file.py py.typed
现有核心配置:
[build-system] requires = ["setuptools>=42", "wheel", "nuitka", "toml"] build-backend = "nuitka.distutils.Build" [nuitka] disable-ccache = true include-package-data = "my_package=py.typed"
可行解决方案
方案1:用Nuitka的include-data-files明确映射文件
修改[nuitka]段的配置,通过include-data-files指定py.typed的源路径和目标路径,确保文件被复制到wheel包的对应目录:
[nuitka] disable-ccache = true include-data-files = "my_package/py.typed=my_package/"
该配置会将项目中my_package/py.typed文件复制到wheel包内的my_package/目录下,符合类型标记文件的放置要求。
方案2:结合setuptools标准package-data配置
如果方案1不生效,可以在pyproject.toml中添加setuptools标准的包数据配置,Nuitka的build backend会读取并应用这部分规则:
[project] # 补充你的项目基础配置(如name、version等) package-data = { "my_package": ["py.typed"] } [build-system] requires = ["setuptools>=42", "wheel", "nuitka", "toml"] build-backend = "nuitka.distutils.Build" [nuitka] disable-ccache = true
这种方式遵循Python打包规范,同时兼容Nuitka的构建流程。
验证方法
构建完成后,可通过以下步骤确认py.typed是否被包含:
# 解压wheel包到临时目录 unzip your_package-*.whl -d temp_check # 检查目标目录 ls temp_check/my_package/
若输出中包含py.typed,说明配置生效。
内容的提问来源于stack exchange,提问作者bphi
相关产品推荐
相关产品推荐

