如何通过pyproject.toml选择主包内特定子包并包含主包__init__.py
解决setuptools构建时包含主包
__init__.py并指定子包的问题 问题原因
你之前的配置里,include只写了subpkg1、subpkg2,setuptools会把这些当成顶级包去查找,而非mypkg下的子包;同时主包mypkg本身没被加入include列表,所以它的__init__.py不会被打包进产物。
解决方案一:明确包含主包和目标子包
修改pyproject.toml的include配置,把主包mypkg以及需要的子包(带完整层级路径)加进去:
[tool.setuptools.packages.find] include = [ "mypkg", "mypkg.subpkg1", "mypkg.subpkg2", ] namespaces = false
这样setuptools会同时包含主包mypkg(含它的__init__.py)和指定的两个子包,其他子包会被自动排除。
解决方案二:用exclude排除不需要的子包
如果需要保留的子包数量多、不需要的少,这种方式更高效:先包含整个主包,再排除不需要的子包:
[tool.setuptools.packages.find] include = ["mypkg"] exclude = [ "mypkg.subpkg3", "mypkg.subpkg4", # 列出所有不需要打包的子包 ] namespaces = false
验证方式
执行构建命令后,可查看build/lib目录或dist下的wheel包,确认mypkg/__init__.py和指定子包都已被包含。
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

