Bra*_*der 5 python-poetry fastapi uvicorn
我有一个由诗歌构建的 fastapi 项目。我想在 pyproject.tom 中使用脚本部分运行应用程序,如下所示:
poetry run start
Run Code Online (Sandbox Code Playgroud)
该部分中的双引号内是什么?
[tool.poetry.scripts]
start = ""
Run Code Online (Sandbox Code Playgroud)
我尝试运行以下脚本。
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()
Run Code Online (Sandbox Code Playgroud)
它停止应用程序并只显示这样的警告。
警告:您必须将应用程序作为导入字符串传递以启用“重新加载”或“工人”。
我找到了解决这个问题的方法。见下文:
在 pyproject.toml
[tool.poetry.scripts]
start = "my_package.main:start"
Run Code Online (Sandbox Code Playgroud)
在您的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)
Run Code Online (Sandbox Code Playgroud)
您将需要传递模块路径 ( module:function):
[tool.poetry.scripts]
start = "app:main"
Run Code Online (Sandbox Code Playgroud)
现在运行下面的命令将调用模块中的main函数app:
$ poetry run start
Run Code Online (Sandbox Code Playgroud)
正如错误消息所示,执行以下操作
uvicorn.run("app")
Run Code Online (Sandbox Code Playgroud)
另请注意,使用重新加载和工作人员是无用的,只会使用重新加载器。这些标志是互斥的
| 归档时间: |
|
| 查看次数: |
3798 次 |
| 最近记录: |