首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FastAPI抛出一个错误(加载ASGI应用程序时出错)。无法导入模块"api")

FastAPI抛出一个错误(加载ASGI应用程序时出错)。无法导入模块"api")
EN

Stack Overflow用户
提问于 2020-03-23 18:16:12
回答 15查看 107.8K关注 0票数 103

我试图使用运行FastAPI,但它引发了一个错误。

我执行这个命令,

代码语言:javascript
运行
复制
uvicorn api:app --reload --host 0.0.0.0

但是终端有个错误。

代码语言:javascript
运行
复制
Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Started reloader process [23445]
Error loading ASGI app. Could not import module "api".
Stopping reloader process [23445]
EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2020-07-16 12:25:50

TL;DR

在文件名前面添加目录名

代码语言:javascript
运行
复制
uvicorn src.main:app 

或进入该目录的cd

代码语言:javascript
运行
复制
cd src
uvicorn main:app 

长答案

之所以会发生这种情况,是因为您与您的FastAPI应用程序实例不在同一个文件夹中,具体而言:

假设我有这样一个应用程序树;

代码语言:javascript
运行
复制
my_fastapi_app/
├── app.yaml
├── docker-compose.yml
├── src
│   └── main.py
└── tests
    ├── test_xx.py
    └── test_yy.py

$ pwd         # Present Working Directory
/home/yagiz/Desktop/my_fastapi_app

我和我的app实例不在同一个文件夹中,所以如果我尝试用uvicorn运行我的应用程序,我会得到一个类似于您的错误

代码语言:javascript
运行
复制
$ uvicorn main:app --reload
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [40645] using statreload
ERROR:    Error loading ASGI app. Could not import module "main".

答案非常简单,请在文件名前面添加文件夹名。

代码语言:javascript
运行
复制
uvicorn src.main:app --reload

或者您可以更改工作目录。

代码语言:javascript
运行
复制
cd src 

现在我用我的app实例在文件夹中

代码语言:javascript
运行
复制
src
└── main.py

再次运行你的uvicorn

代码语言:javascript
运行
复制
$ uvicorn main:app --reload
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [40726] using statreload
INFO:     Started server process [40728]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
票数 186
EN

Stack Overflow用户

发布于 2021-08-30 07:30:35

发生这种情况的原因之一是您正在使用:

代码语言:javascript
运行
复制
uvicorn src/main:app --reload    

而不是正确的语法

代码语言:javascript
运行
复制
uvicorn src.main:app --reload 

注意.而不是/

目前自动完成终端提示格式错误.

这是假设:

(1)你的结构如下:

代码语言:javascript
运行
复制
project_folder/
├── some_folder
├── src
│   └── main.py
└── tests
    ├── test_xx.py
    └── test_yy.py

(2)您的FastAPI()对象确实被分配给一个名为appmain.py对象

代码语言:javascript
运行
复制
app = FastAPI()

(3)您正在从project_folder运行uvicorn命令,例如:

代码语言:javascript
运行
复制
(venv) <username>@<pcname>:~/PycharmProjects/project_folder$ uvicorn src.main:app --reload
票数 10
EN

Stack Overflow用户

发布于 2020-07-17 19:34:43

我也遇到了同样的问题,并在main之前添加了包名,在您的示例中尝试:

代码语言:javascript
运行
复制
uvicorn src.main:app --reload

可以解决问题

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60819376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档