You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨目录导入模块问题:无法将models.py导入至__init__.py

解决Flask项目中models模块导入失败问题

目录结构

Backend
├── Flaskr
│   └── __init__.py
└── models.py

问题描述

需要在Flaskr/__init__.py中导入models.py里的setup_db和Book,尝试了以下两种导入语句:

  • from models import setup_db, Book
  • from backend.models import setup_db, Book

但分别触发以下错误:

from models import setup_db, Book
ModuleNotFoundError: No module named 'models'

或者:

from backend.models import setup_db, Book
ModuleNotFoundError: No module named 'backend'

错误原因

  1. 第一种导入失败:__init__.py位于Flaskr目录下,Python默认仅搜索当前文件所在目录及sys.path中的路径,models.py在上级Backend目录,不在搜索范围内,因此无法找到。
  2. 第二种导入失败:Backend目录未被识别为Python包(缺少__init__.py文件),或运行环境的sys.path未包含Backend的父目录,导致Python找不到backend模块。

解决方案

方案1:使用相对导入

在Flaskr/__init__.py中用相对路径指定上级目录:

from ..models import setup_db, Book

注意:这种方式要求Backend被当作Python包使用,不能直接运行__init__.py,需从Backend目录外部启动项目(比如在Backend的父目录下执行flask run)。

方案2:手动添加路径到sys.path

在Flaskr/__init__.py开头加入代码,将Backend目录加入Python搜索路径:

import sys
import os

# 获取Backend目录的绝对路径
backend_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if backend_dir not in sys.path:
    sys.path.append(backend_dir)

# 此时可正常导入
from models import setup_db, Book

方案3:将Backend设为Python包

在Backend目录下创建空的__init__.py文件,目录结构变为:

Backend
├── __init__.py
├── Flaskr
│   └── __init__.py
└── models.py

之后即可使用from backend.models import setup_db, Book导入,同时要确保Backend的父目录在sys.path中,或从该父目录启动项目。

内容的提问来源于stack exchange,提问作者Melissa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:36:10