如何从诗歌运行FastAPI应用程序?

时间:2020-09-09 10:17:54

标签: fastapi python-poetry uvicorn

我有一个通过诗歌构建的fastapi项目。我想使用pyproject.tom中的脚本部分运行应用程序,如下所示:

poetry run start

该部分的双引号里面是什么?

[tool.poetry.scripts]
start = ""

我试图运行以下脚本。

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()

它将停止应用程序,并仅显示这样的警告。

警告:您必须将应用程序作为导入字符串传递才能启用“重新加载”或“工人”。

3 个答案:

答案 0 :(得分:5)

我找到了解决这个问题的方法。见下文:

pyproject.toml

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

在您的 main.py 内的 my_package 文件夹中。

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)

答案 1 :(得分:2)

您将需要传递模块路径(module:function):

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

现在运行以下命令将在main模块中调用app函数:

$ poetry run start

答案 2 :(得分:0)

就像错误消息中所说的那样,做

uvicorn.run("app")

请注意,也使用reload和worker是没有用的,只会使用reloader。这些标志是互斥的