我试图使用运行FastAPI,但它引发了一个错误。
我执行这个命令,
uvicorn api:app --reload --host 0.0.0.0
但是终端有个错误。
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]
发布于 2020-07-16 12:25:50
TL;DR
在文件名前面添加目录名
uvicorn src.main:app
或进入该目录的cd
cd src
uvicorn main:app
长答案
之所以会发生这种情况,是因为您与您的FastAPI应用程序实例不在同一个文件夹中,具体而言:
假设我有这样一个应用程序树;
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运行我的应用程序,我会得到一个类似于您的错误
$ 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".
答案非常简单,请在文件名前面添加文件夹名。
uvicorn src.main:app --reload
或者您可以更改工作目录。
cd src
现在我用我的app实例在文件夹中
src
└── main.py
再次运行你的uvicorn
$ 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.
发布于 2021-08-30 07:30:35
发生这种情况的原因之一是您正在使用:
uvicorn src/main:app --reload
而不是正确的语法
uvicorn src.main:app --reload
注意.而不是/
目前自动完成终端提示格式错误.
这是假设:
(1)你的结构如下:
project_folder/
├── some_folder
├── src
│ └── main.py
└── tests
├── test_xx.py
└── test_yy.py
(2)您的FastAPI()
对象确实被分配给一个名为app
的main.py
对象
app = FastAPI()
(3)您正在从project_folder
运行uvicorn命令,例如:
(venv) <username>@<pcname>:~/PycharmProjects/project_folder$ uvicorn src.main:app --reload
发布于 2020-07-17 19:34:43
我也遇到了同样的问题,并在main之前添加了包名,在您的示例中尝试:
uvicorn src.main:app --reload
可以解决问题
https://stackoverflow.com/questions/60819376
复制相似问题