根本原因是pytest可执行文件不自动将当前目录加入sys.path,而python -m pytest会;可靠解法是通过pip install -e .将项目安装为可编辑包,使模块全局可导入。

pytest test_*.py 报 ModuleNotFoundError,但 python -m pytest 正常
根本原因是 pytest 可执行文件不自动把当前目录加进 sys.path,而 python -m pytest 会。这导致测试文件里写的 import mypackage 在直接调用 pytest 时找不到模块。
- 验证方式:在测试文件开头加
import sys; print(sys.path[0]),对比两种命令的输出——python -m pytest的第一项通常是当前工作目录,pytest的则不是 - 临时解决:运行前手动加路径,比如
python -c "import sys; sys.path.insert(0, '.'); exec(open('test_main.py').read())"(不推荐) - 真正可靠的解法是让项目“可安装”,在项目根目录放
pyproject.toml或setup.py,然后运行pip install -e .。这样无论用哪种方式启动 pytest,模块都能被识别
测试文件和被测模块不在同级目录,import 失败
Python 导入只认包结构,不认文件系统里的“看起来很近”。比如 tests/test_api.py 想导入 src/myapp/utils.py,光靠相对路径写 import utils 是无效的。
调用 Cutout.Pro 视觉处理 API 进行背景移除、人像抠图和照片增强,支持文件上传与图片 URL 输入。
- 必须满足包结构:
src/目录下要有__init__.py(哪怕为空),且src要在sys.path中 - 常见错误写法:
from utils import helper(假设utils.py在src/下)→ 应该写成from src.utils import helper - 如果不想改导入语句,可在
conftest.py开头加路径修正:import sys, os; sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src"))
PyCharm 或 VS Code 里点运行按钮报 ImportError
IDE 默认用自己配的 Python 解释器执行单个文件,但没继承终端的 sys.path 行为,也不走 python -m 那套逻辑。
- 检查 PyCharm 的 Run Configuration → “Python interpreter” 是否指向你装了 pytest 的虚拟环境
- VS Code 中确认
.vscode/settings.json里python.defaultInterpreterPath和终端激活的环境一致 - 更稳妥的做法:在 IDE 的运行配置里把 command 改成
python -m pytest,而不是直接调用pytest - 别依赖“右键 Run”,优先用终端跑
python -m pytest tests/来验证逻辑是否真通
pip install pytest 后 still no module named 'pytest'
这不是安装失败,而是环境错位。你可能在 A 环境装了 pytest,但解释器实际在 B 环境里找。
- 先执行
which python和which pip(macOS/Linux)或where python和where pip(Windows),看路径是否一致 - 强制用当前解释器装:
python -m pip install pytest,比单纯pip install pytest更可靠 - 检查
pip show pytest输出的Location:,再对比python -c "import pytest; print(pytest.__file__)"是否指向同一目录 - conda 用户注意:
conda install pytest和pip install pytest混用可能导致冲突,优先统一用 conda
python 和那个 pip,是不是同一个?Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










