FastAPI:“导入错误:尝试在没有已知父包的情况下进行相对导入”

问题描述 投票:0回答:3

我是 FastAPI 新手,在导入其他文件时一直遇到此问题。

我收到错误:u200du200du200du200d

from . import schemas
ImportError: attempted relative import with no known parent package

就上下文而言,我从中导入的文件是一个名为 Blog 的文件夹。我看到某些 StackOverflow 答案说我应该写

from . import schemas
而不是
from Blog import schemas
。即使他们的解决方案是正确的,并且我在运行 python 程序时没有收到任何错误,当我尝试使用 uvicorn 运行 FastAPI 时,我收到此错误,并且我的本地主机页面未加载。

  File "./main.py", line 2, in <module>
from Blog import schemas
ModuleNotFoundError: No module named 'Blog'

文件结构如下所示:

主文件的代码如下所示:

from fastapi import FastAPI
from Blog import schemas, models
from database import engine

app = FastAPI()

models.Base.metadata.create_all(engine)


@app.post('/blog')
def create(request: schemas.Blog):
    return request

模式.py

from pydantic import BaseModel


class Blog(BaseModel):
    title: str
    body: str

数据库.py

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

SQLALCHAMY_DATABASE_URL = 'sqlite:///./blog.db'

engine = create_engine(SQLALCHAMY_DATABASE_URL, connect_args={"check_same_thread": False})

SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)

Base = declarative_base()

模型.py

from sqlalchemy import *
from database import Base


class Blog(Base):
    __tablename__ = 'blogs'
    id = Column(Integer, primary_key=True, index=True)
    title = Column(String)
    body = Column(String)

SwaggerUI 也未加载。

任何帮助将不胜感激! :)

python python-3.x swagger-ui fastapi
3个回答
6
投票

由于您的

schemas.py
models.py
文件与 main.py 文件位于
同一目录
中,因此您应该按如下方式导入这两个模块,而不是使用
from Blog import schemas, models
:

import schemas, models

有关更多详细信息和示例,请查看这个答案,以及这个答案这个答案


4
投票

您还可以从上面的文件夹运行您的应用程序。例如,如果你使用 uvicorn,你可以这样做

uvicorn folder.main:app --reload

而不是

uvicorn main:app --reload

然后你就可以保留这个点了。


1
投票

你好,我这样帮助了(不带点):

from models import User
## instead of 
# from .models import User
© www.soinside.com 2019 - 2024. All rights reserved.