【问题标题】:how to run fastapi project in debug mode auto reload in vscode如何在调试模式下运行fastapi项目在vscode中自动重新加载
【发布时间】:2021-02-17 08:54:59
【问题描述】:

从 fastapi python 开始。

这就是我的服务器字符串

class Server:
    def __init__(self):
        self.app = FastAPI()

    def runServer(self, host: str, port: int,is_dev:bool):
        uvicorn.run(self.app, host=host, port=port,debug=is_dev)


if __name__ == "__main__":
    server = Server()
    # read the environment variables
    host: str = os.environ['host']
    port: int = int(os.environ['port'])
    is_dev: bool = bool(os.environ['dev'])

    server.runServer(host, port, is_dev)

如果我进行任何更改,这会提升服务器但不会在自动重新加载模式下运行。

我试过了

uvicorn.run(self.app, host=host, port=port, reload=is_dev)

我想重新加载不是一个选项,从而导致服务器崩溃。

我尝试在 launch.json 中传递 --reload args,但仍然无法正常工作

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: FastAPI",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/main.py",
            "jinja": true,
            "args": ["--reload"],
            "env": {
                "host": "127.0.0.1",
                "port": "5555",
                "dev": "true"
            }
        }
    ]
}

有什么想法吗?我错过了什么吗?

【问题讨论】:

    标签: python debugging visual-studio-code fastapi


    【解决方案1】:

    仅当app 参数是格式为<module>:<app_instance>reloaddebug 参数为真的字符串时,uvicorn 才会以重新加载模式启动。像这样:

    if __name__ == "__main__":
        uvicorn.run("example:app", host="127.0.0.1", port=5000, reload=True)
    

    摘自documentation

    请注意,可以传递应用程序实例本身而不是应用程序导入字符串。

    uvicorn.run(app, host="127.0.0.1", port=5000, log_level="info")

    但是,此样式仅在您不使用多处理 (workers=NUM) 或重新加载 (reload=True) 时有效,因此我们建议使用导入字符串样式。

    【讨论】:

    • 所以我需要传递字符串而不是传递应用程序对象,然后只有 reload=True 才能工作?
    • 是的,对于重新加载,您应该使用字符串 app 参数
    • 如果我必须将标题和描述传递给文档应用程序怎么办?
    • 如果您像我一样对example:app 感到困惑:我假设(因为这个理论对我有用)example 是您在其中运行 FastAPI 应用程序的文件的名称本例:example.pyapp 来自app = FastAPI(debug=True)
    • @alex_noname:你能澄清一下将应用程序作为字符串传递和作为 fastAPI 对象传递之间的区别吗?我们应该如何铸造字符串?有这方面的文件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2015-11-25
    • 2014-12-29
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多