繁体   English   中英

Python ImportError:尝试在没有已知父包的情况下进行相对导入

[英]Python ImportError: attempted relative import with no known parent package

我正在学习fastapi 我有一个非常简单的项目结构,像这样

.
├── __init__.py
├── database.py
├── main.py
├── models.py
├── requirements.txt
└── schemas.py

里面main.py

from fastapi import FastAPI
from typing import Optional
from . import schemas, models
from .database import engine

app = FastAPI()

# more code here...

但是当我用uvicorn main:app --reload运行它时,我得到了错误

...
从 。 导入模式、模型
ImportError:尝试在没有已知父包的情况下进行相对导入

我不明白为什么我会收到这个错误。 我正在松散地遵循本教程 我还阅读了许多相关的 SO 问题( 1 2 3 ),但似乎没有一个符合我的情况。

不要将文件导入为“from . import schemas, models”,而是尝试像这样直接导入它 - import schemas,models 。我认为这可能会奏效。

虽然你的逻辑“。” 目录是正确的,相对导入总是依赖于环境配置,这可能会因 IDE、venv 等而有所不同,例如,在 VScode 中, env可能会根据launch.jsonsettings.json在运行时有所不同

我建议您更好地构建您的项目,使其包含包含__init__.py和同音模块名称的包文件夹,因此您可以在__init__.py文件中设置导入行为。

示例感谢:这里DatabaseModel1Model2database/database.pymodels/models.py中的类

其中database/__init__.py定义如下,以链接 database.py 中的 Database 类,在“上层”文件夹中导入

并且models/__init__py类似地将models.py类链接到“上层”文件夹

请注意,使用from关键字引用目录时,默认情况下使用被调用目录中的__init__.py将对象导入 main,因此您可以随意将特定实例或变量与常量一起定义到__init__.py中,以及任何类型的操作(虽然并不总是一件好事......)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM