FastAPI throws an error (Error loading ASGI app. Could not import module "api")
TL;DR
Add the directory name in front of your filename
uvicorn src.main:app
or cd
into that directory
cd src
uvicorn main:app
Long Answer
It happens because you are not in the same folder with your FastAPI app instance more specifically:
Let's say i have an app-tree like this;
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
I'm not inside the same folder with my app instance, so if I try to run my app with uvicorn I'll get an error like yours
$ 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".
The answer is so simple, add the folder name in front of your filename
uvicorn src.main:app --reload
or you can change your working directory
cd src
Now i'm inside of the folder with my app instance
src
└── main.py
Run your uvicorn again
$ 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.
One reason this might be happening is that you are using:
uvicorn src/main:app --reload
instead of the correct syntax:
uvicorn src.main:app --reload
Notice the . instead of the /
Currently auto-completion in the terminal suggests the wrong format.
That's assuming that:
(1) your structure is something like this:
project_folder/
├── some_folder
├── src
│ └── main.py
└── tests
├── test_xx.py
└── test_yy.py
(2) your FastAPI()
object is indeed assigned to an object named app
in main.py
:
app = FastAPI()
(3) you are running the uvicorn command from the project_folder
, e.g.:
(venv) <username>@<pcname>:~/PycharmProjects/project_folder$ uvicorn src.main:app --reload