FastAPI项目uvicorn可运行,直接Python启动报模块找不到错误
问题原因及解决方案
问题根源
当你执行python app/main.py时,Python会将app/目录设为当前脚本的运行目录,不会自动把项目根目录(包含app文件夹的那个目录)加入到Python的模块搜索路径(sys.path)。这时候代码里的from app.api_v1.apis import api_router会找不到app模块——因为sys.path里没有项目根目录,Python不知道去哪找这个名为app的包。
而用uvicorn app.main:messages_classification_app启动时,你是在项目根目录执行的命令,uvicorn会自动把当前工作目录(项目根)添加到sys.path中,所以能正常识别app包。
解决办法
方法1:以模块方式运行脚本
在项目根目录执行以下命令:
python -m app.main
-m参数会让Python把当前目录加入sys.path,以模块的方式启动app.main,这样就能正确找到app包下的子模块。
方法2:手动添加项目根目录到sys.path
修改app/main.py的开头部分,先把项目根目录加入Python的搜索路径:
import os import sys # 获取当前脚本的绝对路径,再向上跳一级得到项目根目录 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # 之后再导入其他模块 from fastapi import FastAPI import uvicorn from app.api_v1.apis import api_router
这样不管从哪个路径启动main.py,Python都能找到项目根目录下的app包。
方法3:继续使用uvicorn命令启动
这其实是FastAPI官方推荐的启动方式,本身就不存在模块路径问题,可以保持使用。
内容的提问来源于stack exchange,提问作者George Katsanos
相关产品推荐
相关产品推荐

