如何在Python的FastAPI项目中从根目录导入模块?
解决FastAPI跨包导入ModuleNotFoundError问题
Python的模块搜索路径(sys.path)中未包含package_2所在的根目录,导致无法识别该包。以下是几种可行的解决方法:
方法1:在代码中动态添加根目录到sys.path
在foo.py开头添加代码,手动将包含package和package_2的根目录加入Python搜索路径:
import sys from pathlib import Path # 获取当前文件路径,向上追溯到根目录(包含package和package_2的目录) current_file = Path(__file__).resolve() # 根据你的目录层级,找到package目录的父目录作为根目录 root_dir = current_file.parents[5].parent # 也可以用更通用的自动查找方式,避免层级变化出错 # for parent in current_file.parents: # if parent.name == "package": # root_dir = parent.parent # break sys.path.append(str(root_dir)) # 现在可正常导入package_2中的模块 from package_2.bar import 你的函数名
方法2:设置PYTHONPATH环境变量
启动FastAPI应用前,将项目根目录添加到PYTHONPATH环境变量:
Linux/macOS终端
export PYTHONPATH="/绝对路径/到/根目录:$PYTHONPATH" # 启动FastAPI应用(假设main.py在package/app/app/下) uvicorn app.app.main:app --reload
Windows命令提示符
set PYTHONPATH=C:\绝对路径\到\根目录;%PYTHONPATH% uvicorn app.app.main:app --reload
方法3:将项目安装为可编辑包
适合长期维护的项目,通过配置文件让Python自动识别所有子包:
- 在包含
package和package_2的根目录下创建pyproject.toml:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "your-project" version = "0.1.0" packages = ["package.app.app", "package_2"]
- 在根目录执行命令安装可编辑包:
pip install -e .
- 之后在
foo.py中直接导入即可:
from package_2.bar import 你的函数名
内容的提问来源于stack exchange,提问作者lr_optim
相关产品推荐
相关产品推荐

