setuptools_scm将已提交.gitignore纳入sdist包,如何免MANIFEST.in排除?
问题解答
1. [tool.setuptools.exclude-package-data]的作用及替代MANIFEST.in的可行性
- 这个配置仅针对Python包目录内的文件生效,作用是排除项目包(比如
your_project/目录下)中不需要打包进wheel或sdist的资源文件。 - 它完全无法处理项目根目录的文件(比如根目录的
.gitignore),所以想用它排除根目录文件属于配置项误用,无法替代MANIFEST.in完成该操作。
2. 配置误用分析及根目录文件排除方案
- 你猜测的没错,
[tool.setuptools.exclude-package-data]里的*指代的是你的项目包目录,而非项目根目录,所以这个配置根本不会处理根目录的.gitignore。 - 要排除sdist包根目录的
.gitignore等文件,除了MANIFEST.in,还可以直接在pyproject.toml中配置setuptools的sdist排除规则:[tool.setuptools.sdist] exclude = [".gitignore"] - 关于setuptools_scm的影响:setuptools_scm会默认把Git仓库中已追踪的文件(包括
.gitignore)自动加入sdist打包列表,需要同时配置setuptools_scm的排除规则,避免它强制纳入目标文件:[tool.setuptools_scm] exclude = [".gitignore"]
组合以上两项配置后,无需MANIFEST.in即可完成根目录.gitignore的排除。
内容的提问来源于stack exchange,提问作者StSav012
相关产品推荐
相关产品推荐

