如何将单元测试随src与tests分离结构的Python包一同发布
打包时包含tests目录的解决方法
场景1:仅tar包(sdist)包含tests(推荐方案)
常规Python打包规范中,wheel包仅携带运行所需的业务代码,tests仅放在sdist中供下游验证、自行跑测试使用,操作如下:
- 在项目根目录(与src、tests同级目录)新建
MANIFEST.in文件,写入以下内容:
recursive-include tests *.py
- 重新执行打包命令即可,此时生成的tar包会自动包含tests目录,wheel包仍仅保留src下的运行代码,符合通用分发习惯。
场景2:tar包和wheel包都需要包含tests
如果要求wheel中也携带测试代码,需要调整包发现规则,操作如下:
- 给tests目录添加
__init__.py文件,将其标记为Python可识别的包,调整后目录结构:
mypackage/ src/ mypackage/ __init__.py hello.py tests/ __init__.py test_hello.py
- 修改
setup.cfg的包搜索配置,更新后内容如下:
[metadata] name = mypackage version = 1.5.0 author = John Henckel url = https://test.com [options] package_dir = = src packages = find: [options.packages.find] where = src . # 可选:过滤不需要打包的冗余目录 exclude = build dist *.egg-info
- 重新执行打包命令即可,此时两种包都会包含tests目录,安装后tests会作为顶级包存在于site-packages目录下。
验证打包结果的命令:
- 查看tar包内容:
tar -tf dist/mypackage-1.5.0.tar.gz- 查看wheel包内容:
unzip -l dist/mypackage-1.5.0-py3-none-any.whl
内容的提问来源于stack exchange,提问作者John Henckel
相关产品推荐
相关产品推荐

