Conda构建中meta.yml配置pytest测试无执行的问题排查
解决conda build测试阶段pytest无法收集/找到测试用例的问题
核心原因
conda build的测试环节在隔离环境中运行,默认仅安装构建完成的包,不会自动将源码中的tests目录同步到测试环境——即便你的sdist包包含该目录,也不会自动复制到测试工作目录。另外,pytest --pyargs mypackage未收集到测试,是因为测试代码未被打包进安装包(通常tests目录不会被配置为安装内容),导致pytest无法从包内找到测试用例。
解决方案
1. 正确配置meta.yml的test.source_files
在meta.yml的test段明确指定复制源码中的tests目录到测试环境,注意路径要与conda build读取源码的路径匹配:
test: source_files: - tests commands: - python -c "import mypackage" # 导入检查 - pip check - pytest tests/ # 直接使用复制后的目录路径,无需加./前缀
2. 确认打包配置的合理性
确保pyproject.toml(或setup.py)中,既让sdist包含tests目录,又不将其作为安装内容(避免冗余文件进入用户环境):
# pyproject.toml示例配置 [tool.setuptools] packages = ["mypackage"] package_dir = {"": "src"} [tool.setuptools.sdist] include = ["tests/**/*"] # 确保sdist包含tests目录
3. 调整测试命令的路径写法
测试阶段的工作目录并非源码根目录,./tests/会因路径不匹配报错,直接使用tests/即可(source_files已将目录复制到当前测试工作目录)。
4. 备选方案:通过模块路径调用测试
若上述配置仍有问题,可尝试通过模块路径执行测试(需确保tests目录下有__init__.py,使其成为可导入模块):
test: commands: - python -c "import mypackage" - pip check - pytest tests # 以模块形式指定测试目录
验证步骤
- 重新生成sdist包,确认tar.gz内的
tests目录完整无缺 - 执行
conda build .,观察测试环节是否能找到tests目录并正常执行测试用例
内容的提问来源于stack exchange,提问作者Barzi2001
相关产品推荐
相关产品推荐

