首页 > 解决方案 > 如何从 Poetry 运行 FastAPI 应用程序?

问题描述

我有一个由诗歌构建的 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()

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

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

标签: fastapipython-poetryuvicorn

解决方案


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

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)

推荐阅读