使用pytest的Python项目正确目录结构及导入报错如何解决?
问题原因与解决方案
错误根本原因
你使用的src/tests分离的项目结构是Python官方推荐的标准项目结构,无需更换。报错来源于两个核心问题:
- main.py中的导入写法不符合包导入规则:
from b import triplicate属于顶级模块导入,Python会在sys.path的路径中搜索名为b的模块,而src目录默认不在搜索路径范围内,因此无法找到对应模块。 - pytest运行时默认不会把项目根目录、src目录加入Python的模块搜索路径,导致包导入链路中断。
修复步骤
步骤1:修正包内导入写法
给src目录下添加空的__init__.py文件,将其声明为Python包。
修改src/main.py的导入语句,使用包内相对导入:
# 修改前 from b import triplicate # 修改后 from .b import triplicate
步骤2:配置Python模块搜索路径(二选一即可)
方案A:pytest配置文件(适合快速修复)
在项目根目录新建pytest.ini配置文件,内容如下:
[pytest] pythonpath = . src
该配置会让pytest运行时自动把项目根目录、src目录加入模块搜索路径,无需其他改动。
方案B:安装项目为可编辑模式(适合长期维护的正式项目)
在项目根目录新建pyproject.toml配置文件,写入基础的项目打包配置:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "demo-project" version = "0.1.0" packages = ["src"]
在项目根目录执行命令安装可编辑版本的项目:pip install -e .
安装完成后,src包会被加入Python全局搜索路径,任意位置运行pytest都能正常识别导入。
步骤3:验证运行
修改完成后在项目根目录执行pytest命令,即可正常运行测试用例。
内容的提问来源于stack exchange,提问作者Ed1123
相关产品推荐
相关产品推荐

