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

使用APIRouter时FastAPI应用启动失败,无法导入app.main模块

问题排查与解决方案

1. 修复模块导入缺失问题

你的main.py直接使用user_controller.router但未导入对应模块,这是启动失败的核心原因之一。修改main.py如下:

from fastapi import FastAPI
from presentation.user_controller import router as user_router

app = FastAPI()

app.include_router(user_router)

同时,user_controller.py缺少必要的依赖导入,补充后代码如下:

from fastapi import APIRouter
from pymongo import MongoClient
import os

router = APIRouter(
    prefix="/users",
    tags=["users"],
    responses={404: {"description": "Not found"}},
)

client = MongoClient(os.environ['MONGODB_CONNSTRING'])
db = client['fullkron']
users = db['users']


@router.get("/")
async def get_users():
    # 同步MongoClient的find()返回游标,需转换为列表才能被FastAPI序列化
    return list(users.find())

2. 配置Python包识别路径

presentation作为app的子目录,需要被识别为Python包。在presentation目录下创建空的__init__.py文件,目录结构更新为:

├── app
│   ├── presentation
│   │   ├── __init__.py
│   │   ├── user_controller.py
│   ├── main.py

3. 处理MongoDB连接与异步兼容问题

  • 确保Docker启动时传入MONGODB_CONNSTRING环境变量,比如启动命令添加:-e MONGODB_CONNSTRING="你的MongoDB连接字符串"
  • 同步MongoClient在异步接口中会引发阻塞问题,建议改用异步驱动motor:
    1. 在requirements.txt中添加motor
    2. 修改user_controller.py适配异步操作:
from fastapi import APIRouter
from motor.motor_asyncio import AsyncIOMotorClient
import os

router = APIRouter(
    prefix="/users",
    tags=["users"],
    responses={404: {"description": "Not found"}},
)

client = AsyncIOMotorClient(os.environ['MONGODB_CONNSTRING'])
db = client['fullkron']
users = db['users']


@router.get("/")
async def get_users():
    user_list = []
    async for user in users.find():
        # 将ObjectId转为字符串,避免序列化错误
        user["_id"] = str(user["_id"])
        user_list.append(user)
    return user_list

4. 容器内调试定位

若仍启动失败,可进入容器手动测试模块导入,精准定位问题:

# 进入容器
docker exec -it <容器ID> bash
# 测试模块导入
python -c "from app.main import app"

根据终端报错信息进一步排查。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:55:48