我正在尝试调试使用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所说的话。调试器似乎已启动,但没有任何反应(没有断点被触发)
答案 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)
答案 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
标志运行应用程序,因为否则调试器将跳过断点(至少在我情况)