使用Pytest执行纯Python项目单元测试遇ModuleNotFoundError求助
解决pytest找不到src模块的问题
问题原因
AWS Chalice框架会自动把项目根目录加入Python的模块搜索路径(sys.path),所以测试时能正常导入src下的模块;但纯Python项目没有这个自动配置,导致Python解释器找不到src目录,抛出ModuleNotFoundError。
三种解决方法
方法一:临时设置PYTHONPATH运行pytest
在项目根目录下执行命令,把当前目录(项目根目录)加入Python的搜索路径:
- Linux/macOS:
PYTHONPATH=. pytest
- Windows(命令提示符):
set PYTHONPATH=. && pytest
- Windows(PowerShell):
$env:PYTHONPATH="."; pytest
优点:无需修改代码,临时生效;缺点:每次运行都要加前缀,适合快速测试场景。
方法二:通过conftest.py自动添加路径
在tests目录下创建conftest.py文件,内容如下:
import sys from pathlib import Path # 获取项目根目录路径并加入sys.path sys.path.append(str(Path(__file__).parent.parent))
pytest运行时会自动加载这个文件,把项目根目录加入搜索路径,之后直接运行pytest即可。
优点:一劳永逸,仅针对当前项目的测试生效;缺点:仅适配pytest,其他运行方式需额外配置。
方法三:将项目安装为可编辑模式
- 在项目根目录下创建
setup.py文件,内容:
from setuptools import setup, find_packages setup( name="myproject", version="0.1.0", packages=find_packages(where="src"), package_dir={"": "src"}, )
- 执行安装命令:
pip install -e .
安装后,src下的模块会被当作正式包导入,不管在哪运行测试或代码都能正常导入。
优点:符合Python包规范,适合长期维护的项目;缺点:需额外配置setup文件,首次操作稍繁琐。
内容的提问来源于stack exchange,提问作者Eric Wang
相关产品推荐
相关产品推荐

