uvicorn热重载需显式加--reload且端口用--port指定,推荐命令为uvicorn main:app --host 0.0.0.0 --port 8080 --reload;生产禁用--reload;pycharm等ide中脚本内调用uvicorn.run()易失效,应改用终端命令或正确配置run configuration;版本兼容问题常见,建议降级至uvicorn==0.20.0。

直接用 uvicorn 命令改端口和开热重载
默认启动是 uvicorn main:app --reload,端口固定为 8000,热重载已启用。要改端口,只需加 --port 参数;热重载必须显式带 --reload,缺一不可。
-
--port后面跟纯数字,不能带引号,比如--port 8080或--port=8080都行 - 如果同时指定 host 和 port,推荐写全:
uvicorn main:app --host 0.0.0.0 --port 8080 --reload,避免绑定到 127.0.0.1 导致局域网访问不了 -
--reload只在开发时用,生产环境绝对不要加——它会 fork 子进程监听文件,有额外开销,且重启瞬间服务不可用 - 修改代码后,终端会打印
INFO: Reloading triggered by changes...,几秒内就生效;没这行说明没真正 reload
--reload 不生效?先看是不是 uvicorn 版本太高
PyCharm 2024+ 或某些新版本 uvicorn(如 0.29.x)存在热重载静默失败问题:保存代码后无日志、不重启、接口还是旧逻辑。这不是你代码或配置错了,是 uvicorn 内部信号监听机制在特定环境下被拦截。
Uvicorn 0.52.1 是 Python ASGI Web 服务器,提供异步应用服务及 WebSocket 支持,常用于 FastAPI、Starlette 等应用的开发和部署。本下载为官方 PyPI 通用 wheel 包,可使用 pip 安装,并由包管理器处理所需依赖。
- 最稳的解法是降级 uvicorn 到
0.20.0:pip install uvicorn==0.20.0 --force-reinstall - 别试
0.23.0或0.27.0,这两个版本在 PyCharm 和部分 VSCode 配置下同样大概率失效 - 验证是否生效:改一行
return {"msg": "old"}为"new",保存后刷新接口,响应必须立刻变;否则 reload 没走通
别在 Python 脚本里调 uvicorn.run() 启动
很多教程教你在 main.py 末尾写 if __name__ == "__main__": uvicorn.run("main:app", reload=True),这在 PyCharm 里几乎必然导致热重载失效。
- PyCharm 的进程模型会干扰 uvicorn 的子进程 fork 和信号捕获,
reload=True形同虚设 - VSCode 也一样,除非你严格按
"module": "uvicorn"+"subProcess": true配 launch.json,否则断点能打、reload 不动 - 正确做法就是放弃脚本内启动,一律走终端命令:
uvicorn main:app --reload --port 8001 - 如果非要用 IDE 一键运行,PyCharm 里新建 Run Configuration,Type 选 “Python”,Script path 留空,Module name 填
uvicorn,Parameters 填main:app --reload --port 8001
想只监听某个目录?用 --reload-dir
默认 --reload 会扫描整个当前目录(包括 venv/、.git/),改动虚拟环境里的包也可能误触发重启,既慢又烦。
- 限制范围:比如只监控
app/和models/目录,加两个--reload-dir:--reload-dir app --reload-dir models - 排除临时文件:
--exclude-pattern "*.pyc" --exclude-pattern "__pycache__",防止缓存文件变动引发无谓重启 - 注意路径是相对当前工作目录的,不是相对于
main.py;启动前cd到项目根目录再执行命令
uvicorn 版本一高,PyCharm 里就“假装 reload”,连日志都不打——这点最容易被忽略。大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










