使用python -m build打包未排除tests目录,求正确配置方法
解决
python -m build打包时无法排除tests目录的问题 问题原因
尽管python -m build会间接调用setup.py,但在未配置pyproject.toml的场景下,setuptools的部分行为与直接执行setup.py sdist存在差异,导致find_packages(exclude=['tests'])的排除规则未被正确应用。
可行解决方案
1. 添加pyproject.toml明确指定构建后端
在项目根目录创建pyproject.toml文件,内容如下:
[build-system] requires = ["setuptools>=65.5.0", "wheel"] build-backend = "setuptools.build_meta"
该文件会告知build工具使用setuptools作为构建后端,确保setup.py中的所有配置(包括tests目录排除规则)被正确解析执行。
2. 调整find_packages的排除规则写法
将排除规则修改为通配符形式,覆盖tests目录及其所有子目录:
from setuptools import setup, find_packages setup( # 其他项目配置... packages=find_packages(exclude=['tests', 'tests.*']), )
3. 针对非Python包的tests目录处理
如果tests目录下没有__init__.py(即不被识别为Python包),但仍被打包进来,说明是通过include_package_data=True规则包含的。此时需添加exclude_package_data配置:
setup( # 其他项目配置... include_package_data=True, exclude_package_data={'': ['tests/*']}, )
验证步骤
执行python -m build后,解压生成的.tar.gz或.whl文件,检查是否已移除tests目录,确认规则生效。
内容的提问来源于stack exchange,提问作者Motti
相关产品推荐
相关产品推荐

