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

Docker容器内执行pytest报错找不到fastapi模块该如何解决?

问题解决方法

问题根因

  • 容器内置换了pytest执行路径:你在安装tesseract-ocr时,apt包管理器可能顺带安装了系统级的python3-pytest包,这个pytest绑定的是系统自带的Python解释器,而你的fastapi、pytest等依赖是通过pip安装到官方Python镜像自带的Python3.9环境中,两者的依赖库路径不互通,直接执行pytest命令时默认调用了系统版本的pytest,就会找不到pip安装的依赖。
  • 特殊现象的合理性:uvicorn是通过pip安装的,启动时会调用对应pip所在的Python3.9解释器,能正确读取所有依赖,所以ASGI服务运行正常;本地conda环境的pytest和fastapi属于同一个环境,所以执行不会报错。

解决步骤

第一步:验证根因

执行以下命令进入容器:
docker exec -it <container_name> bash
分别执行命令确认:

  • 确认Python环境有fastapi依赖:python -c "import fastapi; print(fastapi.__version__)",如果正常输出版本号说明依赖安装正常
  • 确认pytest调用路径:which pytest,如果输出为/usr/bin/pytest,则说明调用的是apt安装的系统版本pytest,符合根因判断

第二步:选择对应解决方法

  • 方法1(最稳妥,无需修改镜像):执行测试时改用Python解释器调用pytest
    直接在外部执行命令:
    docker exec <container_name> python -m pytest api/tests/test_endpoints.py
    该命令会调用安装依赖的Python3.9解释器自带的pytest,可正常读取所有依赖。
  • 方法2(修改Dockerfile一劳永逸):在Dockerfile的apt安装步骤后添加卸载系统pytest的逻辑,修改后Dockerfile对应部分如下:
    RUN apt update
    RUN apt-get -y install tesseract-ocr
    # 卸载apt安装的系统版本pytest,避免和pip安装的版本冲突
    RUN apt-get remove -y python3-pytest
    RUN pip install --upgrade pip
    RUN pip install --upgrade -r /app/api/requirements.txt
    
    重新构建镜像后,直接执行docker exec <container_name> pytest api/tests/test_endpoints.py即可正常运行。
  • 方法3(临时适配路径问题):如果是Python模块搜索路径缺失导致的问题,可在执行测试时添加PYTHONPATH环境变量:
    docker exec <container_name> PYTHONPATH=/app pytest api/tests/test_endpoints.py

内容的提问来源于stack exchange,提问作者Sandip Saha Joy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:08