简体   繁体   中英

How to run FastAPI application from Poetry?

I have a fastapi project built by poetry. I want to run the application with a scripts section in pyproject.tom like below:

poetry run start

What is inside double quotes in the section?

[tool.poetry.scripts]
start = ""

I tried to run the following script.

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

def main():
    print("Hello World")
    uvicorn.run(app, host="0.0.0.0", port=8000, reload=True, workers=2)

if __name__ == "__main__":
    main()

It stops the application and just shows warning like this.

WARNING: You must pass the application as an import string to enable 'reload' or 'workers'.

I found the solution to this problem. See below:

In pyproject.toml

[tool.poetry.scripts]
start = "my_package.main:start"

In your main.py inside my_package folder.

import uvicorn
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

def start():
    """Launched with `poetry run start` at root level"""
    uvicorn.run("my_package.main:app", host="0.0.0.0", port=8000, reload=True)

You will need to pass the module path ( module:function ) to the start script in project.toml :

[tool.poetry.scripts]
start = "app:main"

Now run the command below will call the main function in the app module:

$ poetry run start

Just as the error message says, do

uvicorn.run("app")

Note also using reload and workers is useless and will just use the reloader. These flags are mutually exclusive

WARNING: You must pass the application as an import string to enable 'reload' or 'workers'.

try using the same way to run a basic script ie file:variable

ERROR: Error loading ASGI app. Import string "app" must be in format ":".

uvicorn.run("backend.main:app", host="0.0.0.0", port=8000, reload=True, workers=2)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM