Application runs with uvicorn but can't find Module (No module named 'app')

Application runs with uvicorn but can't find Module (No module named 'app')

Problem Description:

.
├── __pycache__
│   └── api.cpython-310.pyc
├── app
│   ├── __pycache__
│   │   └── main.cpython-310.pyc
│   ├── api_v1
│   │   ├── __pycache__
│   │   │   └── apis.cpython-310.pyc
│   │   ├── apis.py
│   │   └── endpoints
│   │       ├── __pycache__
│   │       │   └── message_prediction.cpython-310.pyc
│   │       └── message_prediction.py
│   ├── config.py
│   ├── main.py
│   └── schemas
│       ├── Messages.py
│       └── __pycache__
│           └── Messages.cpython-310.pyc
├── app.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   └── top_level.txt
├── build
│   └── bdist.macosx-12.0-arm64
├── data
│   ├── processed
│   │   ├── offers_big.csv_cleaned.xlsx
│   │   └── requests_big.csv_cleaned.xlsx
│   ├── processed.dvc
│   ├── raw
│   │   ├── offers.csv.old
│   │   ├── offers_big.csv
│   │   ├── requests.csv.old
│   │   └── requests_big.csv
│   ├── raw.dvc
│   ├── validated
│   │   ├── validated_offers.xlsx
│   │   └── validated_requests.xlsx
│   └── validated.dvc
├── dist
│   └── app-0.1.0-py3.10.egg
├── model.pkl
├── model.py
├── notebooks
│   └── contact-form.ipynb
├── requirements.in
├── requirements.txt
├── setup.py
└── test_api.py
# main.py
import os
from fastapi import FastAPI
import uvicorn
from app.api_v1.apis import api_router

# create the app
messages_classification_app = FastAPI()

messages_classification_app.include_router(api_router)

if __name__ == '__main__':
    uvicorn.run("app.main:messages_classification_app", host=os.getenv("HOST", "0.0.0.0"), port=int(os.getenv("PORT", 8000)))
# requirements.in
fastapi
uvicorn
-e file:.#egg=app

Trying to run the fastAPI app with python, results in error:

 py[learning]  ~/r/v/contact-form-classification   master ±  python app/main.py
Traceback (most recent call last):
  File "/Users/xxxxx/repos/visable/contact-form-classification/app/main.py", line 4, in <module>
    from app.api_v1.apis import api_router
ModuleNotFoundError: No module named 'app'

Running it with uvicorn directly works:

 py[learning]  ~/r/v/contact-form-classification   master ±  uvicorn app.main:messages_classification_app
INFO:     Started server process [53665]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

Any idea why? Looked into similar questions, don’t seem to apply to mine.

Solution – 1

python app/main.py will make app/ the first entry in sys.path, so app imports within won’t work.

Do python -m app.main to run app/main.py as a module without having Python touch sys.path.

Rate this post
We use cookies in order to give you the best possible experience on our website. By continuing to use this site, you agree to our use of cookies.
Accept
Reject