uvicorn 报错:Error loading ASGI app. Could not import module 'app'.?

上一个问题解决后出现的连锁问题:
https://segmentfault.com/q/1010000044426482

uvicorn 开启服务报错 Error loading ASGI app. Could not import module "app".

目录结构:
my_app_name
├── py
│ └── python.exe 等
├── main.py
├── app.py
└── run.bat

run.bat

@echo off
REM  用 python.exe 调用 run.py 并传递所有输入参数
.\py\python.exe main.py %*

main.py

import sys
import getopt
import uvicorn
import pathlib
from multiprocessing import freeze_support

if __name__ == "__main__":  
    freeze_support()
    
    uvicorn.run('app:app', host="0.0.0.0", port=8000, reload=True, workers=1)

app.py

from fastapi import FastAPI  

app = FastAPI()

@app.post("/xxx")
# 以下略

运行run.bat
报错:
ERROR: Error loading ASGI app. Could not import module "app".

我认为还是路径的问题,但我没有找到解决方案,
相似问题在 https://stackoverflow.com/questions/60819376/fastapi-throws-an-error-error-loading-asgi-app-could-not-import-module-api
但和我这不太一样

请问这该怎么办?

谢谢

阅读 2.3k
1 个回答

安装了uvicorn后,py目录下面的Scripts目录下面有一个uvicorn.exe ,命令可以改成:uvicorn.exe app:app --reload --host 0.0.0.0 --port 8000 ,这里直接执行uvicorn命令是没问题的。

如果要在 main.py 里面通过 uvicron.run() 启动 app,在 main.py 里面加上这两句

# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.realpath(__file__))
# 将项目根目录添加到 Python 路径中
sys.path.append(current_dir)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏