在VSCode中调试FastAPI应用程序

时间:2020-02-13 09:58:11

标签: visual-studio-code fastapi uvicorn

我正在尝试调试使用FastAPI(uvicorn)的应用程序(网络api) 我也在使用诗歌,并在vscode中设置了projev虚拟环境。

我阅读了this教程来设置uvicorn和this one来设置vscode,但是我认为我在设置它时做错了。

我尝试将launch.json都设置为 python:模块 python:当前文件

问题似乎是我运行调试时无法识别项目结构的原因,它在导入语句中停止,并出现以下错误:

Exception has occurred: ImportError
attempted relative import with no known parent package

这是我当前的launch.json配置:

"configurations": [
    {
        "name": "Python: local debug",
        "type": "python",
        "request": "launch",
        "program": "${workspaceFolder}/src/topic_service/service/__init__.py",
        "args" : ["--port", "8000"]
    },
]

我还尝试添加.env文件设置PYTHONPATH:

PYTHONPATH=.:${PYTHONPATH}

我在本地运行该应用程序,如下所示:

poetry run uvicorn src.main:app --port 8080 --reload

有人知道如何正确设置vscode来调试uvicorn应用程序吗?

谢谢

更新: 我也尝试了this article所说的话。调试器似乎已启动,但没有任何反应(没有断点被触发)

4 个答案:

答案 0 :(得分:13)

尝试此配置。

{
    "name": "Python: Module",
    "type": "python",
    "request": "launch",
    "module": "uvicorn",
    "args": ["src.main:app","--reload"]
}

答案 1 :(得分:6)

在FastAPI应用程序的开发过程中,您同样为uvicorn 模块提供了必要的 args ,您需要配置{{1 }}目录以及相应的值。

我将自定义项目配置写到debug FastAPI in VS Code here

假设您发出以下命令在uvicorn服务器上运行带有如下所述的args的FastAPI

launch.json

然后您的.vscode应该具有值为<uvicorn main:app --reload --port 8000 module 和每个 args 以空格隔开,作为{{1 }}数组。

launch.json

您可以在uvicorn中拥有此args文件,然后根据您的项目结构在JSON配置中修改"module": "uvicorn", "type": "python", "request": "launch", "args": [ "main:app", "--reload", "--port", "8000" ], "env": { "usersecret": "some$Ecret", } 数组。

launch.json

答案 2 :(得分:2)

快速简便的方法:启动调试器 F5,然后选择 FastAPI 调试配置: (ps 这适用于 VSCode Insiders;还没有在常规版本上尝试过)

enter image description here

答案 3 :(得分:0)

我调试的方法是非常基本的,希望对您有所帮助 我的.py文件具有以下配置:

import uvicorn
from app.main import api

if __name__ == "__main__":
    dev = 1
    if dev==0:
        #use this one
        uvicorn.run(api, host="127.0.0.1", port=5000, log_level="info")
    if dev == 1:
        #or this one
        uvicorn.run('app.main:api', host="127.0.0.1", port=5000, log_level="info", reload=True, debug=True)
    if dev == 2:
        uvicorn.run('app.main:api', host="127.0.0.1", port=5000, log_level="info", workers=2)

并使用vscode调试器运行文件,重要的是使用 debug 标志运行应用程序,因为否则调试器将跳过断点(至少在我情况)