运行uvicorn启动FastAPI报错:main模块无app属性,无法加载ASGI应用
问题原因分析
- 启动命令匹配的文件名错误:
uvicorn main:app --reload命令中冒号前的main指代加载名为main.py的Python文件,若你的FastAPI代码存储的文件名不是main.py,就无法在对应模块中找到app属性。 - 终端工作目录不匹配:即使文件命名为
main.py,若执行uvicorn命令的终端工作目录不是main.py所在的文件夹,也会加载不到正确的模块。 - 代码缩进/语法错误:若
app = FastAPI()行未顶格编写,被缩进包含在其他函数、判断逻辑内部,没有作为模块顶层属性暴露,也会导致加载失败。 - 环境兼容性问题:虚拟环境未正确激活、fastapi或uvicorn版本存在兼容问题时,也可能偶发此类加载错误。
解决方案
- 核对文件命名:将存放对应FastAPI代码的文件重命名为
main.py,文件名不要包含大写字母、空格或特殊符号。 - 核对工作目录:执行启动命令前,先在终端执行
cd D:\FASTAPI切换到main.py所在的文件夹,再运行启动命令。 - 核对代码逻辑:检查
app = FastAPI()行是否为顶格编写,没有被其他代码块包裹,代码无语法错误。 - 适配自定义文件名:如果不想将文件命名为
main.py,可以直接修改启动命令适配你的文件名,比如文件名为demo.py时,执行uvicorn demo:app --reload即可,冒号前的名称需要和Python文件名完全一致。 - 验证运行状态:修复完成后重新执行启动命令,日志无ERROR提示即代表启动成功,访问
http://127.0.0.1:8000即可看到返回的{"Hello": "World"}响应内容。
内容的提问来源于stack exchange,提问作者Vikas Jha
相关产品推荐
相关产品推荐

