You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Hatchling与pyproject.toml构建项目时,仍遭遇ModuleNotFoundError: No module named 'src'问题求助

使用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

火山引擎 最新活动