簡體   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