如何让python -m build仅打包src布局下的目标包,排除额外文件夹?
解决src布局Python包构建时排除额外文件夹的问题
针对你用python -m build构建src布局Python包时,tar.gz归档包含不必要的datasets、model文件夹的问题,以下是几种可靠的解决方法:
方法1:使用MANIFEST.in(推荐,精准控制源归档内容)
python -m build生成的源码归档(tar.gz)会优先读取根目录的MANIFEST.in文件来确定包含/排除的内容,这是控制sdist内容最直接的方式:
- 在项目根目录创建
MANIFEST.in文件,写入以下内容:
# 仅包含src目录下的目标包 include src/mypkg/**/* # 打包必要的元数据文件 include pyproject.toml setup.cfg setup.py README.md LICENSE # 排除指定的冗余文件夹 prune datasets/ prune model/ # 可添加其他需要排除的路径,比如: # prune logs/ # exclude *.pyc
- 执行
python -m build --sdist重新构建,解压生成的tar.gz即可验证效果。
方法2:调整setup.cfg的sdist专属配置
如果偏好通过setup.cfg配置,需在sdist段直接指定排除规则(之前的exclude配置可能未关联到sdist打包流程):
在setup.cfg中添加或修改:
[sdist] exclude = datasets/ model/ [options] packages = find: package_dir = = src
此配置会直接告诉setuptools在生成sdist时跳过指定的根目录文件夹。
方法3:升级setuptools版本
旧版本的setuptools对src布局和exclude规则的支持存在bug,确保pyproject.toml中指定的build依赖为最新版:
[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta"
61.0及以上版本的setuptools对src布局的打包逻辑更稳定,能正确识别排除规则。
验证步骤
执行python -m build --sdist --outdir ./temp_build,在temp_build目录下解压生成的.tar.gz文件,检查是否仅包含src/mypkg和元数据文件(pyproject.toml、setup.cfg等),无冗余文件夹。
内容的提问来源于stack exchange,提问作者David Waterworth
相关产品推荐
相关产品推荐

