pytest 报 ModuleNotFoundError 怎么解决?

pytest 找不到模块通常是因为 tests 目录不是包或项目根目录不在 sys.path 中。解决方法:加 __init__.py、配 pythonpath、用 pip install -e . 安装项目。

最佳实践
pytest 报 ModuleNotFoundError 怎么解决?封面

最常见的修复:在 tests/ 目录里加一个空的 __init__.py;如果还不行,在 pytest 配置中设置 pythonpath = .(pytest 7+),或在项目根目录执行 pip install -e . 把项目本身安装为可编辑包。

方法一:tests 目录加 init.py

tests/
├── __init__.py    # 空文件
└── test_module_functions.py

pytest 按包结构解析导入,有了 __init__.py 它才能正确确定模块路径。

方法二:配置 pythonpath(pytest 7.0+)

# pytest.ini
[pytest]
pythonpath = .

把项目根目录加进 sys.path,测试中 from myapp import xxx 就能找到。

方法三:以可编辑模式安装项目(最规范)

pip install -e .

前提是有 pyproject.tomlsetup.py。安装后项目包进入 site-packages,任何位置都能 import——这也是 CI 环境的标准做法。

为什么不推荐手动改 sys.path

老式办法是在 __init__.pyconftest.py 里写 sys.path.append('.'),能工作但脆弱:依赖运行目录、容易在 CI 里失效。优先用方法二或三。

常见问题(FAQ)

Q:直接 python 运行脚本能 import,pytest 就不行?
A:运行脚本时 Python 把脚本所在目录加进 sys.path;pytest 有自己的导入机制(rootdir/conftest 规则),两者不同,所以表现不同。

Q:rootdir 和这个问题有关吗?
A:有关。pytest 以 rootdir(含 pytest.ini/pyproject.toml 的目录)为基准解析。确认从项目根目录运行 pytest。

Q:src 布局(src/myapp/)怎么配?
A:pythonpath = src,或 pip install -e .(推荐,src 布局配合可编辑安装是标准实践)。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台