带src层的Python项目如何使用pytest?测试代码导入问题求助
解决pytest src目录结构下的导入问题
我之前也踩过这个坑——pytest推荐的这种src分离的项目结构确实更规范,但官方没说清测试代码的导入姿势,导致IDE能识别但运行pytest就报错,核心问题是Python解释器找不到src目录下的包,因为默认的sys.path里没有它。
先再确认下你的项目结构(和官方推荐一致):
my_package/ ├── src/ │ └── my_package/ │ ├── __init__.py │ └── util_module/ │ ├── __init__.py │ └── utils.py └── tests/ ├── __init__.py └── test_util_module/ ├── __init__.py └── test_utils.py
下面给你两种靠谱的解决方法:
方法1:用开发模式安装包(推荐)
在项目根目录(my_package/)下运行这条命令:
pip install -e .
这个命令会把你的包以“可编辑”模式安装到Python环境里,相当于把src下的my_package链接到site-packages目录,这样不管是IDE还是pytest运行时,都能直接像导入第三方包一样写代码:
# test_utils.py里的导入示例 from my_package.util_module.utils import your_function
方法2:配置pytest的Python路径
如果不想安装包,也可以通过pytest配置文件指定路径:
在项目根目录创建pytest.ini文件,内容如下:
[pytest] pythonpath = src
这样每次运行pytest时,它都会自动把src目录加到sys.path里,测试代码里的导入写法和上面一样就行。
⚠️ 不推荐的临时方案:直接在测试文件里手动添加路径(虽然能解决,但代码不优雅,也不利于维护):
# test_utils.py开头加这段 import sys from pathlib import Path sys.path.append(str(Path(__file__).parent.parent.parent / "src")) # 然后正常导入 from my_package.util_module.utils import your_function
内容的提问来源于stack exchange,提问作者Arne
相关产品推荐
相关产品推荐

