【问题标题】:pydantic BaseModel not found in Fastapi在 Fastapi 中找不到 pydantic BaseModel
【发布时间】:2020-06-02 13:15:22
【问题描述】:

我在 Kubuntu 18.04 上有 3.6.9。我已经使用pip3 install fastapi 安装了。我正在尝试通过其官方文档来测试该框架,并且我在其指南的the relational database section 中。

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

我曾尝试使用pip3 重新安装pydantic,但它告诉我:

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

【问题讨论】:

    标签: python3 fastapi python python-3.x fastapi pydantic


    【解决方案1】:

    你注意到的第一件事

    在 Fastapi 中找不到 pydantic BaseModel

    与您的 linter 有关。 当我的 linter 是 pylint 时,我收到了同样的警告,所以我将 linter 从 pylint 更改为 mypy,问题就消失了。

    1. 通过 pip 安装 mypy

      pip install mypy

    2. 在 VScode 中打开命令面板

      Ctrl+Shift+P

    3. 在命令面板中输入:

      Python: Select Linter

    4. 然后在 linter 列表中选择 mypy

    【讨论】:

    • 这个建议奏效了,非常感谢!
    【解决方案2】:

    这是二进制/C 扩展的常见问题。更多详情,请点击此处:(Pylint & C extensions)

    要修复它,您需要将以下内容添加到 .pylintrc 文件中(如果您愿意,可以将此文件添加到当前项目文件夹中)

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

    请注意,切换到 mypy(如此处的另一个答案所建议的那样)不是正确的方法,因为 pylint 和 mypy 是两个不同的东西(前者是 linter 而后者是一种类型检查器

    【讨论】:

      【解决方案3】:

      VS代码中高亮的问题,可能是你没有打开文件夹的问题。这很烦人,因为它也经常发生在我身上(而且我的配置基本上与你相同)。

      关于你提到的第二个问题,可能是由于脚本所在的文件夹没有__init__.py文件。如果添加它,它应该可以工作,因为 python 会将文件夹解释为模块。

      作为替代方案,您可以尝试使用顶部文件夹中的完整路径导入(例如from app.module.main import app)。

      有关模块的更多信息,请参阅以下链接:

      Python 3.8 Modules

      Real Python

      【讨论】:

      • 我注意到一些事情,当从项目的根目录导入它时,导入工作如教程中所述,但如果我尝试从 myprojectRoot/db 运行它,我必须修改导入陈述
      • 如果没有文件夹结构,我很难提供答案,但这就是 python 导入的工作方式(或者至少我理解你的项目结构)
      【解决方案4】:

      在 vscode 上测试:

      在您的工作区文件夹中,指定选项

      pylintrc

      .pylintrc

      选项文件,在Pylint command line argument 中指定,使用此命令:pylint --generate-rcfile &gt; .pylintrc

      查找extention-pkg-allow-list 并在= 之后添加pydantic 生成选项文件后应该是这样的:extention-pkg-allow-list=

      添加pydantic的时候应该是这样的:

      extention-pkg-allow-list=pydantic
      

      这应该可以解决您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-12
        • 2022-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        • 2021-05-27
        • 2022-06-14
        相关资源
        最近更新 更多