You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行python -m pytest tests命令无法定位包的问题求助

解决pytest找不到src目录下模块的问题

咱先搞清楚问题根源:当你在/project目录下执行python3 -m pytest tests时,Python的模块搜索路径(sys.path)里默认只有当前工作目录(也就是/project),但你的package包是放在/project/src下面的,所以Python找不到它,自然就报ModuleNotFoundError了。

给你几个实用的解决办法,按你的项目规模和需求选就行:

方法1:临时设置PYTHONPATH环境变量

这是最快的临时解决方案,直接在执行pytest的时候把src目录加入Python路径:

PYTHONPATH=src python3 -m pytest tests

这样Python就会优先在src目录下查找package这个包,测试就能正常导入了。

方法2:用conftest.py自动配置路径

如果不想每次都手动设置环境变量,可以在/project目录下创建一个conftest.py文件,内容如下:

import sys
from pathlib import Path

# 获取当前conftest.py所在的目录(也就是/project),然后拼接src路径
src_path = Path(__file__).parent / "src"
sys.path.append(str(src_path))

pytest会自动加载项目根目录下的conftest.py,每次运行测试时都会自动把src加到模块搜索路径里,一劳永逸。

方法3:将项目安装为可编辑模式(推荐长期项目使用)

这是最规范的做法,适合需要持续维护的项目。首先在/project目录下创建setup.py文件(或者用更现代的pyproject.toml),示例setup.py内容:

from setuptools import setup, find_packages

setup(
    name="your-project-name",  # 替换成你的项目名称
    version="0.1.0",
    packages=find_packages(where="src"),
    package_dir={"": "src"},  # 告诉setuptools源码在src目录下
)

然后在/project目录下执行:

pip install -e .

这个命令会把你的项目以“可编辑”模式安装到Python环境中,这样不管你在哪个目录运行测试,Python都能找到package模块,而且你对源码的修改会实时生效,不用重新安装。

补充:pytest的模块查找逻辑

pytest在运行时,会把你执行pytest命令的目录(也就是这里的/project)加入到sys.path中。所以如果你的源码不在这个目录的直接子目录里,Python就找不到对应的包。解决问题的核心就是把src目录加入到sys.path中,让Python能扫描到里面的包结构。

内容的提问来源于stack exchange,提问作者CodingButStillAlive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:22:50