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

Flask项目Heroku运行正常本地报ModuleNotFoundError导入错误

问题根源

  • 直接运行app.py时报错是因为入口文件名和顶层包目录同名,Python运行时会优先把入口脚本app.py识别为app模块,而非你作为包的app目录,因此无法找到app.resources等子模块。
  • 将app.py重命名为test.py后报错是因为你直接在app目录下执行脚本,Python默认仅会将当前执行脚本所在的目录(即app目录)加入模块搜索路径,无法搜索到上层的app包。

解决方案

方案1:调整目录结构(最推荐,适配部署和本地开发逻辑)

将入口文件移到app目录的外层,调整后目录结构如下,同时确保所有作为包的目录下都有__init__.py文件:

项目根目录/
    run.py  # 原app.py的全部内容迁移到此处
    app/
        __init__.py
        config.py
        db.py
        models/
            __init__.py
            authentication.py
        resources/
            __init__.py
            authentication.py
        routes/
            __init__.py
            authentication.py

调整后在项目根目录下执行python run.py即可正常启动,原有代码中from app.xxx import xxx的导入逻辑不需要做任何修改,和Heroku部署的运行逻辑完全一致。

方案2:不调整结构,修改启动命令

如果不需要调整现有目录结构,可以切换到app目录的上层目录,用模块执行的方式启动项目:

# 执行命令时所处目录为app目录的父目录
python -m app.app

该方式会自动将当前所在目录加入Python模块搜索路径,同时将app目录识别为Python包,app.app对应包内的app.py入口文件。

方案3:临时修改模块搜索路径(仅适用临时调试场景)

如果一定要在app目录下直接运行app.py,可以在app.py的所有导入语句之前添加以下代码,手动将上层目录加入模块搜索路径:

import sys
from pathlib import Path
sys.path.append(str(Path(__file__).parent.parent.resolve()))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:48:03