使用Hatchling与pyproject.toml构建项目时,仍遭遇ModuleNotFoundError: No module named 'src'问题求助
先帮你梳理下当前的问题场景:之前得到过社区的帮助,学会了用现代技术搭建Python项目结构,但给仓库新增脚本和测试后,又碰到了熟悉的ModuleNotFoundError: No module named 'src'错误。你操作时发现了几个可疑点:执行hatch env create时默认环境已存在、进入hatch shell图标异常,还有pip install -e .出现了用户安装的提示,之后运行pytest就触发了测试文件的导入错误。
咱们一步步来排查解决:
1. 先检查pyproject.toml的核心配置
Hatchling完全依赖这个文件识别你的包结构,这大概率是问题根源。确保你的配置正确指向了src下的包,比如:
[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "hypermvp" version = "0.1.0" # 两种正确配置src结构的方式二选一 packages = [{ include = "hypermvp", from = "src" }] # 或者写成:packages = ["src/hypermvp"]
如果这里配置错了,pip install -e .就没法把src下的包正确注册到Python路径里,自然找不到src模块。
2. 确认Hatch虚拟环境是否真的激活了
你提到进入hatch shell时图标不对,这很可能是环境没正确激活。可以在shell里执行where python(Windows),看看输出的路径是不是Hatch创建的虚拟环境目录(一般在用户目录下的.local\share\hatch\envs下面),如果指向的是系统Python,说明环境没激活成功。
解决办法:要么重启终端再试hatch shell,要么直接用hatch run <命令>的方式跳过shell激活,比如hatch run pip install -e .和hatch run pytest,这样能确保命令在Hatch的虚拟环境里执行。另外,default环境已经存在是正常的,Hatch默认会创建这个环境,不用纠结~
3. 修正测试文件的导入路径
这是很多人用src结构时容易踩的坑:你的测试文件里写的from src.hypermvp.provider...是错的!当你用pip install -e .安装后,hypermvp包已经被加到Python的环境路径里了,src只是你的本地源码目录,不是包名。正确的导入应该是直接从包名开始:
# 把这个 from src.hypermvp.provider.loader import load_provider_file # 改成这个 from hypermvp.provider.loader import load_provider_file
这一步是关键,很多时候导入错误都是因为这个小细节。
4. 解决可编辑安装的权限提示
你看到的Defaulting to user installation...提示,是因为你没在Hatch的虚拟环境里执行pip install -e .,不小心用了系统Python的pip(没有site-packages写入权限)。只要确保在Hatch环境里执行安装命令,这个提示就会消失,也能保证包安装到正确的位置。
快速验证的步骤
如果上面的点你都检查了,不如按这个流程重新操作一遍:
- 删除现有环境:
hatch env remove default - 重新创建环境:
hatch env create - 直接用Hatch执行安装:
hatch run pip install -e . - 运行测试:
hatch run pytest
要是还是不行,把你的pyproject.toml完整内容贴出来,我再帮你深挖细节!
备注:内容来源于stack exchange,提问作者PhillyVanilly




