pydantic BaseModel not found in Fastapi

Question:

I have 3.6.9 on Kubuntu 18.04. I have installed using pip3 install fastapi. I’m trying to test drive the framework through its official documentation and I’m in the relational database section of its guide.

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 code highlights an error in from pydantic import BaseModel and it tells that: No name 'BaseModel' in module 'pydantic'. Additionally, when I try to run uvicorn main:app reload I have gotten the following error:

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

I have tried to renstall pydantic using pip3 but it tells me that:

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

||

Answers:

The problem of highlighting in VS code may be a problem due to the fact that you did not open the folder. It’s quite annoying as it happens often to me as well (and I have basically your same config).

Regarding the second problem you mention, it is probably due to the fact that the folder in which the script lays, does not have a __init__.py file. If you add it, it should work since python will interpret the folder as a module.

As an alternative, you could try to import with the full path from the top folder (e.g. from app.module.main import app).

For more information about modules see the following links:

Python 3.8 Modules

Real Python

Answered By: lsabi

The first thing that you noticed

pydantic BaseModel not found in Fastapi

is related to your linter.
I got the same warning when my linter was pylint, so I changed the linter from pylint to mypy and the problem disappeared.

  1. Install mypy via pip

    pip install mypy

  2. Open the command palette in VScode

    Ctrl+Shift+P

  3. Type this in command palett:

    Python: Select Linter

  4. Then Select mypy in the list of linters

Answered By: Unique_boy96

This is a common problem with binary/C extensions. For further details, check here: (Pylint & C extensions)

To fix it, you need to add the following to .pylintrc file (You can add this file to your current project folder if you like)

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

Note that switching to mypy (as suggested by another answer here) is not the right approach since pylint & mypy are two different things (the former is a linter while the latter is sort of a type checker)

Answered By: Salem Artin

Tested on vscode:

In your workspace folder, specify Options in

pylintrc

or

.pylintrc

options file, as specified in Pylint command line argument, using this command: pylint --generate-rcfile > .pylintrc

Look for extension-pkg-allow-list and add pydantic after =
It should be like this after generating the options file: extension-pkg-allow-list=

When you add pydantic, it should be like this:

extension-pkg-allow-list=pydantic

This should solve your problem.

Answered By: David Anyatonwu

Building on the excellent answers that explain how to modify .pylintrc, if you are using pyproject.toml for your project you can do this instead:

[tool.pylint.main]
extension-pkg-allow-list = ["pydantic"]
Answered By: carej