pydantic BaseModel не найден в Fastapi

У меня есть python3 3.6.9 в Kubuntu 18.04. Я установил fastapi с помощью pip3 install fastapi. Я пытаюсь протестировать фреймворк через его официальную документацию, и я нахожусь в реляционной базе данных раздел руководства.

In schemas.py:

from typing import List

from pydantic import BaseModel

class VerseBase(BaseModel):
    AyahText: str
    NormalText: str

class Verse(VerseBase):
    id: int

    class Config:
        orm_mode = True

Код VS выделяет ошибку в from pydantic import BaseModel и сообщает, что: No name 'BaseModel' in module 'pydantic'. Кроме того, когда я пытаюсь запустить uvicorn main:app reload, я получаю следующую ошибку:

File "./main.py", line 6, in <module>
   from . import crud, models, schemas
ImportError: attempted relative import with no known parent package

Я попытался переустановить pydantic с помощью pip3, но он говорит мне, что:

Requirement already satisfied: dataclasses>=0.6; python_version < "3.7" in ./.local/lib/python3.6/site-packages (from pydantic) (0.7)

person SaidbakR    schedule 02.06.2020    source источник


Ответы (3)


Первое, что вы заметили

pydantic BaseModel не найден в Fastapi

имеет отношение к вашему линтеру. Я получил такое же предупреждение, когда мой линтер был pylint, поэтому я изменил линтер с pylint на mypy, и проблема исчезла.

  1. Установите mypy через pip

    pip install mypy

  2. Откройте палитру команд в VScode

    Ctrl+Shift+P

  3. Введите это в палитре команд:

    Python: Select Linter

  4. Затем выберите mypy в списке линтеров

person Unique_boy96    schedule 10.10.2020
comment
Это предложение сработало, спасибо вам большое! - person Sun Bee; 23.12.2020
comment
@SunBee Добро пожаловать :) - person Unique_boy96; 04.01.2021

Проблема выделения в коде VS может быть проблемой из-за того, что вы не открывали папку. Это довольно раздражает, поскольку это часто случается и со мной (и у меня в основном такая же конфигурация).

Что касается второй проблемы, о которой вы упомянули, вероятно, это связано с тем, что в папке, в которой находится сценарий, нет файла __init__.py. Если вы добавите его, он должен работать, поскольку python интерпретирует папку как модуль.

В качестве альтернативы вы можете попробовать импортировать с полным путем из верхней папки (например, from app.module.main import app).

Для получения дополнительной информации о модулях перейдите по следующим ссылкам:

Модули Python 3.8

Настоящий Python

person lsabi    schedule 02.06.2020
comment
Я кое-что заметил: при импорте из корня проекта импорт работает так, как указано в руководстве, но если я попытался запустить его из myprojectRoot/db, мне придется изменить операторы импорта - person SaidbakR; 03.06.2020
comment
Без структуры папок мне нелегко дать ответ, но именно так работает импорт python (или, по крайней мере, я понимаю структуру вашего проекта) - person lsabi; 03.06.2020

Это обычная проблема с двоичными расширениями / C. Дополнительные сведения см. Здесь: (Расширения Pylint и C)

Чтобы исправить это, вам нужно добавить следующее в файл .pylintrc (вы можете добавить этот файл в текущую папку проекта, если хотите)

[MASTER]
extension-pkg-allow-list=pydantic

Обратите внимание, что переключение на mypy (как предлагает другой ответ здесь) является неправильным подходом, поскольку pylint и mypy - это две разные вещи (первый - это линтер, а второй - своего рода проверка типов)

person Salem Artin    schedule 16.05.2021