Fastapi中找不到pydantic BaseModel

12

我在Kubuntu 18.04上安装了 3.6.9,并使用pip3 install fastapi安装了。我正在尝试通过其官方文档测试该框架,并且正在进行其指南的关系数据库部分

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在from pydantic import BaseModel中标记了一个错误,并提示:在模块'pydantic'中没有名称为'BaseModel'。 此外,当我尝试运行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
我已尝试使用 pip3 重新安装 pydantic,但它告诉我:
Requirement already satisfied: dataclasses>=0.6; python_version < "3.7" in ./.local/lib/python3.6/site-packages (from pydantic) (0.7)
5个回答

17

这是二进制/C扩展常见的问题。有关详细信息,请在此处查看:Pylint&C扩展

要解决此问题,您需要将以下内容添加到.pylintrc文件中(如果愿意,可以将此文件添加到当前项目文件夹中)。

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

请注意,按照另一个答案建议的方式切换到mypy 不是 正确的方法,因为pylint和mypy是两个不同的东西(前者是代码检查器而后者则是一种类型检查器)。


6

在vscode上测试:

在您的工作空间文件夹中,通过以下命令指定选项文件pylintrc.pylintrc, 如Pylint 命令行选项所述: pylint --generate-rcfile > .pylintrc

查找extension-pkg-allow-list并在等号后面添加pydantic,生成选项文件后应如下所示:extension-pkg-allow-list=

当您添加pydantic时,应该像这样:

extension-pkg-allow-list=pydantic

这应该能解决你的问题。


6

你会注意到的第一件事

在Fastapi中找不到pydantic BaseModel

与你的代码检查工具有关。 当我的检查工具是pylint时,我得到了相同的警告,所以我将代码检查工具从pylint更改为mypy,问题就消失了。

  1. 通过pip安装mypy

    pip install mypy

  2. 在VScode中打开命令面板

    Ctrl+Shift+P

  3. 在命令面板中键入以下内容:

    Python: Select Linter

  4. 然后在检查工具列表中选择mypy


1
这个建议很有用,非常感谢! - Sun Bee

2
在 VS Code 中突出显示的问题可能是由于您没有打开文件夹导致的。这很烦人,因为我也经常遇到这个问题(而且我的配置基本上和您一样)。 至于您提到的第二个问题,可能是由于脚本所在的文件夹中没有 __init__.py 文件。如果添加它,应该可以解决问题,因为 Python 将把文件夹解释为模块。 作为替代方法,您可以尝试从顶级文件夹导入完整路径(例如:from app.module.main import app)。 有关模块的更多信息,请查看以下链接: - Python 3.8 模块 - Real Python

我注意到一些事情,当从项目的根目录导入时,导入工作方式与教程中所述相同,但如果我尝试从 myprojectRoot/db 运行它,则必须修改导入语句。 - SaidbakR
没有文件夹结构,我很难提供答案,但这就是Python导入的工作方式(或者至少我理解你的项目结构是这样的)。 - lsabi

1

在优秀的答案基础上,解释了如何修改.pylintrc,如果您正在使用pyproject.toml来管理项目,您可以尝试以下方法:

[tool.pylint.main]
extension-pkg-allow-list = ["pydantic"]

.pylintrc 中,您可以使用 extension-pkg-allow-list=pydantic,请参阅文档 - avimimoun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,