VSCode中FastAPI调试:利用Uvicorn实现代码修改自动重载

夜丽小哥_3697

夜丽小哥_3697

2026-06-18

1097人浏览

原创

根本原因是uvicorn的--reload依赖文件监听并fork新进程,而debugpy仅attach主进程,不接管子进程;正确做法是launch.json中设"module": "uvicorn"、"args": ["main:app", "--reload"]并启用"subprocess": true。

vscode中fastapi调试:利用uvicorn实现代码修改自动重载

为什么修改代码后Uvicorn没自动重启?

默认用 uvicorn.run() 启动 FastAPI 时,即使加了 --reload 参数,VSCode 调试器也不会触发重载——因为调试模式下 Python 进程由 VSCode 的 debugpy 控制,Uvicorn 的文件监听机制被绕过。

根本原因是:Uvicorn 的 --reload 依赖 watchfiles 或 watchdog 监听文件变化并 fork 新进程,而 debugpy 只 attach 到单个主进程,不支持子进程自动接管调试。

  • 别在 if __name__ == "__main__": 块里直接调用 uvicorn.run(..., reload=True) ——这在调试会话中无效
  • VSCode 的 launch.json 中设 "console": "integratedTerminal" 并手动运行 uvicorn main:app --reload 是可行的,但无法打断点
  • 真正能兼顾断点和重载的方式,是让 VSCode 启动 Uvicorn 的开发模式子进程,而非直接运行脚本

VSCode launch.json 正确配置 reload 的写法

关键不是改参数,而是换启动方式:不用 Python 模块入口,改用 uvicorn 命令行作为调试目标,并显式启用 reload 和端口绑定。

在项目根目录的 .vscode/launch.json 中,使用以下配置:

Uvicorn 0.52.1
Uvicorn 0.52.1

Uvicorn 0.52.1 是 Python ASGI Web 服务器,提供异步应用服务及 WebSocket 支持,常用于 FastAPI、Starlette 等应用的开发和部署。本下载为官方 PyPI 通用 wheel 包,可使用 pip 安装,并由包管理器处理所需依赖。

下载
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "FastAPI (reload)",
      "type": "python",
      "request": "launch",
      "module": "uvicorn",
      "args": [
        "main:app",
        "--host", "127.0.0.1",
        "--port", "8000",
        "--reload",
        "--reload-dir", "."
      ],
      "console": "integratedTerminal",
      "justMyCode": true
    }
  ]
}

注意点:

  • "module": "uvicorn" 表示以 uvicorn 包为入口,不是你自己的 main.py
  • "--reload-dir" "." 显式指定监听根目录,避免某些 IDE 环境下忽略子目录变更
  • 不要加 --debug(Uvicorn 已弃用),也不要设 "stopOnEntry": true,否则首次加载就卡住
  • 如果用 Poetry 或虚拟环境,确保 VSCode Python 解释器指向正确环境,否则 uvicorn 命令可能找不到

常见重载失效场景与修复

即使配置正确,仍可能遇到“改了代码但没重启”,多数源于路径或依赖问题。

  • ImportError: cannot import name 'xxx' from 'yyy' 类错误会导致 Uvicorn 启动失败,但 reload 进程静默退出,终端只闪一下——打开 VSCode 终端面板看完整日志
  • 修改 pydantic 模型或 SQLModel 类时,有时需保存两次才触发 reload,因某些导入链缓存了模块引用;可加 --reload-exclude "*.pyc:__pycache__" 减少干扰
  • Windows 上若提示 WatchdogObserver is not supported on Windows,说明 watchdog 安装异常,执行 pip install watchdog 即可(watchfiles 在 Windows 下有时监听不准)
  • 使用 fastapi.middleware.cors.CORSMiddleware 等中间件时,若在 main.py 外部定义并 import,确保该文件也在 --reload-dir 范围内,否则修改中间件逻辑不会触发重启

调试时断点不生效?检查这三个地方

reload 模式下断点跳过或失效,通常不是 VSCode 问题,而是进程模型不匹配。

  • 确认 launch.json 中没有同时启用 "subProcess": true 和 "console": "integratedTerminal",二者冲突会导致 debugpy 无法 attach 子进程
  • 避免在 main.py 开头加 import uvicorn; uvicorn.run(...),这种写法会让 debugpy 调试的是你的脚本,不是 Uvicorn 主循环
  • 如果用了 async def 路由,断点打在 await 行可能跳过——这是 asyncio 调度特性,把断点往前移到函数入口更可靠

最稳妥的验证方式:启动调试后,在终端看到类似 INFO: Watching for file changes with StatReload 或 INFO: Using WatchdogReloader 日志,且修改任意 .py 文件后出现 INFO: Shutting down → INFO: Started server process 循环,才算真正生效。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vscode uvicorn

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

2025.12.22

119

5

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

2026.02.06

554

18

Python Web框架FastAPI 全栈开发教程合集
Python Web框架FastAPI 全栈开发教程合集

以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文

2026.05.09

596

23

Python FastAPI异步微服务与高性能接口设计
Python FastAPI异步微服务与高性能接口设计

本专题聚焦 Python FastAPI 框架在高性能接口与微服务开发中的应用,讲解异步请求处理、依赖注入机制、路由设计、数据库异步操作以及接口性能优化策略。结合实际项目案例,帮助开发者构建高并发、低延迟的现代化后端服务架构。

2026.06.16

499

12

vscode是什么_vscode怎么安装配置
vscode是什么_vscode怎么安装配置

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

2023.06.30

1375

18

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.21

2892

3

vscode使用的框架介绍
vscode使用的框架介绍

VSCode是一款跨平台代码编辑器,它基于Electron框架和Monaco Editor构建。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1969

12

vscode一般用来写什么语言
vscode一般用来写什么语言

VSCode是一款功能强大的代码编辑器,支持多种编程语言和文件格式。它内置对 JavaScript、Python、Java、C++、TypeScript、HTML/CSS、Go 等语言的支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1727

8

vscode可以写什么语言
vscode可以写什么语言

vscode是一款强大的代码编辑器,支持多种编程语言的开发。通过安装扩展,可以为 JavaScript/TypeScript、Python、Java、C#、PHP、Go、Ruby、Rust、HTML/CSS 等语言提供智能代码补全、调试和格式化等功能。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

2607

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程