执行uvicorn时如何修改PythonPath?解决FastAPI导入路径问题
解决FastAPI项目PythonPath配置问题
针对你的项目结构,要在运行uvicorn时修改PythonPath,这里提供几种实用方案:
方案1:通过环境变量PYTHONPATH临时指定
这是最直接的方式,启动uvicorn时将src目录加入Python的模块搜索路径:
# 切换到src目录后执行 PYTHONPATH=$(pwd) uvicorn openapi_server.main:main --reload
或者一行完成(无需切换目录,假设项目根目录是src的上级):
PYTHONPATH="./src" uvicorn openapi_server.main:main --reload
这样Python会把src视为顶级模块目录,所有基于src的导入路径都能被正确解析。
方案2:正确使用uvicorn的--app-dir参数
你之前的命令没生效,大概率是因为导入路径和--app-dir的匹配逻辑不对:
- 如果你的代码里是相对于
openapi_server目录的导入(比如from apis import xxx),正确命令如下(在src目录下执行):uvicorn main:main --reload --app-dir ./openapi_server--app-dir会把openapi_server目录加入sys.path,Python就能直接找到同目录下的apis、models等子模块。 - 如果你的代码是相对于
src目录的导入(比如from openapi_server.apis import xxx),则不需要--app-dir,直接用方案1将src加入PYTHONPATH即可。
方案3:在代码中手动添加路径
如果环境变量配置不方便,可以在main.py最顶部添加代码,强制将src目录加入搜索路径:
import sys from pathlib import Path # 获取src目录的绝对路径 src_dir = Path(__file__).parent.parent sys.path.append(str(src_dir))
这种方式不依赖启动命令,不管怎么运行uvicorn都能确保导入路径正确。
内容的提问来源于stack exchange,提问作者Xaver
相关产品推荐
相关产品推荐

