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

运行docker-compose up api时遇ModuleNotFoundError: No module named 'routers'

解决ModuleNotFoundError: No module named 'routers'问题

核心原因

Python解释器在当前模块搜索路径中找不到routers模块,结合你的Docker配置和项目结构,分两种常见场景给出解决办法:


场景1:routers是api目录下的子文件夹

如果你的项目结构为api/routers/patients.py,问题出在导入逻辑或Python路径配置:

方案A:使用相对导入

修改api/main.py中的导入语句为相对路径格式:

from .routers.patients import router as PatientsRouter

方案B:将api目录加入Python搜索路径

在Dockerfile中添加环境变量,把/project/api纳入Python模块搜索路径:

FROM python:3.9-slim-buster

WORKDIR /project

COPY ./requirements.txt .

RUN pip install -r requirements.txt

COPY ./api /project/api/

# 添加PYTHONPATH配置
ENV PYTHONPATH=/project/api

CMD ["uvicorn", "main:app", "--host=0.0.0.0", "--port=8000"]

EXPOSE 8000

同时更新docker-compose的启动命令:

command: ["uvicorn", "main:app", "--host=0.0.0.0", "--port=8000"]

场景2:routers是与api同级的根目录文件夹

如果项目根目录下存在独立的routers文件夹(和api平级),问题是Docker构建时未复制该目录到容器内:

解决方案:更新Dockerfile和docker-compose配置

  1. 修改Dockerfile,同步复制routers目录:
FROM python:3.9-slim-buster

WORKDIR /project

COPY ./requirements.txt .

RUN pip install -r requirements.txt

# 同时复制api和routers目录
COPY ./api /project/api/
COPY ./routers /project/routers/

CMD ["uvicorn", "api.main:app", "--host=0.0.0.0", "--port=8000"]

EXPOSE 8000
  1. 更新docker-compose的volumes配置,挂载routers目录:
version: "3.8"
services:
  api:
    build: .
    command: ["uvicorn", "api.main:app", "--host=0.0.0.0", "--port=8000"]
    volumes:
      - ./api:/project/api
      - ./routers:/project/routers
    ports:
      - "8000:8000"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:03:38