如何让Hatch test安装whl而非直接用项目目录?及工具选型疑问
问题
我按照建议配置了Hatch的测试环境:
[tool.hatch.envs.hatch-test] dev-mode = false # 该配置意在安装whl而非使用可编辑/本地模式 dependencies = [ "pytest" ]
但执行hatch test时测试失败,报错显示仍在使用本地文件:
=========================================== FAILURES =========================================== _________________________________________ test_binary __________________________________________ def test_binary() -> str | None: if True: root = files('del3') children = [f for f in get_files_recursively(root)] > raise AssertionError(f"{children}") E AssertionError: [WindowsPath('E:/SourceCode/AndroidStudioProjects/Base/del3/src/del3/__about__.py'), WindowsPath('E:/SourceCode/AndroidStudioProjects/Base/del3/src/del3/__init__.py'), WindowsPath('E:/SourceCode/AndroidStudioProjects/Base/del3/src/del3/__pycache__/__init__.cpython-312.pyc')]
我的目标是打包二进制文件,通过安装whl包进行测试以验证功能正常,认可Hatch的构建钩子,但当前测试不符合预期,现提出两个问题:
- 如何正确让Hatch安装whl包而非直接使用本地文件?
- Hatch是否为最优工具?是否有更易用的构建系统?
解答
1. 让Hatch安装whl包而非本地文件的正确配置
- 仅设置
dev-mode = false无法实现目标,需要明确让测试环境依赖构建好的whl包,而非本地源码,步骤如下:- 先构建whl包:执行
hatch build命令,生成的包会输出到dist/目录。 - 修改测试环境配置,将生成的whl作为依赖添加:
[tool.hatch.envs.hatch-test] dev-mode = false dependencies = [ "pytest", # 替换为实际生成的whl文件名,使用项目根目录下的相对路径 "./dist/del3-<你的版本号>-py3-none-any.whl" ] - 重建测试环境:执行
hatch env prune hatch-test删除原有环境,再用hatch env create hatch-test重新创建并同步依赖,之后执行hatch test即可。
- 先构建whl包:执行
- 额外注意:测试代码中不要直接读取本地文件系统路径(比如
files('del3')这类操作),如果是验证安装后的包功能,应该通过Python包导入的方式访问资源,而非本地路径。
2. Hatch是否为最优工具?替代构建系统推荐
Hatch功能全面,尤其是构建钩子、多环境管理的特性很实用,但如果追求更轻量化或直观的操作,可考虑以下替代工具:
- Poetry:以依赖管理和打包为核心,操作逻辑直观,打包whl流程简单,生态成熟,适合需要快速上手的项目。
- Flit:专注纯Python包打包,配置极简,无需复杂的toml配置项,打包速度快,适合轻量项目。
- Setuptools:Python官方构建工具,兼容性最强,支持高度定制,适合复杂项目,但配置相对繁琐。
如果认可Hatch的构建钩子,建议优先解决当前环境配置问题,Hatch完全能满足二进制打包+测试的需求;若追求更简洁的操作,Poetry或Flit是不错的替代选项。
内容的提问来源于stack exchange,提问作者Cyber Avater
相关产品推荐
相关产品推荐

