I am running python FastAPI with UVICORN with multiple processors (5 processes),It is running smoothly from the code, but when I tried make the exe from pyinstaller and try to run the file, it is showing error.
filename: main.py
import multiprocessing import os import uvicorn from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"} if __name__ == "__main__": multiprocessing.freeze_support() print("Running the instance") uvicorn.run("main:app", host="0.0.0.0", port=9000, workers=5)
Output code from source
python3 main.py Running the instance INFO: Uvicorn running on http://0.0.0.0:9000 (Press CTRL+C to quit) INFO: Started parent process [17828] INFO: Started server process [17869] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Started server process [17870] INFO: Waiting for application startup. INFO: Application startup complete.
I make a single file using pyinstaller with the following command
pyinstaller --onefile main.py
and while running the main file using
./main
get the following error
Running the instance INFO: Uvicorn running on http://0.0.0.0:9000 (Press CTRL+C to quit) INFO: Started parent process [18964] ERROR: Error loading ASGI app. Could not import module "main". ERROR: Error loading ASGI app. Could not import module "main".
How to refer the main:app, what is the actual class name after installer is created? I read somewhere that we need to use like foldername.main:app , but that also not working
Advertisement
Answer
I tried your program and installing with
pyinstaller --onefile --hidden-import=main main.py
solved it for me.