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

pytest运行FastAPI单元测试时触发ImportError:尝试相对导入但未知父包

pytest运行FastAPI单元测试时触发ImportError:尝试相对导入但未知父包

我之前在FastAPI+pytest的项目里也碰到过一模一样的导入问题,本质是Python运行测试时没法正确识别fastapi_app这个包的路径,不管是相对导入还是直接用绝对导入都踩了坑。下面给你几个靠谱的解决方案:

方案一:用pytest配置文件指定模块搜索路径(最推荐)

这个方法一劳永逸,直接告诉pytest去哪里找你的代码包:

  1. 在你的app目录下新建一个pytest.ini文件,内容写:
[pytest]
pythonpath = .

这个配置会把当前的app目录加入Python的模块搜索路径,这样fastapi_app就会被识别成一个顶级可导入包。

  1. 修改test_process.py里的导入语句为绝对导入:
import pytest
from fastapi.testclient import TestClient
from fastapi_app.main import app  # 这里改成绝对导入
  1. 回到app目录重新运行pytest命令:
(venv) PS C:\Users\Administrador\Desktop\code\repo\fastapi_celery_redis\app> pytest

这样pytest就能正确找到app模块,不会再报导入错误了。

方案二:把本地包以开发模式安装到虚拟环境

另一种方式是让Python全局识别你的fastapi_app包,适合长期开发:

  1. 在fastapi_app目录下(就是有__init__.py的那个文件夹)新建一个setup.py文件,内容可以很简单:
from setuptools import setup, find_packages

setup(
    name="fastapi_app",
    version="0.1.0",
    packages=find_packages(),
)
  1. 激活你的虚拟环境,然后在app目录下执行安装命令:
(venv) PS C:\Users\Administrador\Desktop\code\repo\fastapi_celery_redis\app> pip install -e ./fastapi_app

-e参数表示开发模式安装,之后你修改代码不需要重新安装,Python就能直接识别fastapi_app这个包,不管你在哪个目录运行测试,from fastapi_app.main import app都能正常工作。

方案三:临时修改sys.path(应急用,不推荐)

如果你不想改配置或安装包,可以在测试文件开头手动添加路径,但这种方式不够优雅,项目结构变动就会失效:

import sys
from pathlib import Path

# 把fastapi_app目录加入模块搜索路径
sys.path.append(str(Path(__file__).parent.parent))

import pytest
from fastapi.testclient import TestClient
from main import app  # 现在可以直接导入main了

最后再确认两个小细节:

  • 你的fastapi_app目录下已经有__init__.py(这点你已经满足了,没问题)
  • 运行测试时一定要激活虚拟环境,避免依赖版本冲突

备注:内容来源于stack exchange,提问作者AlJw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:57:59