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

运行Flask时出现ModuleNotFoundError,求助解决模块导入问题

解决Flask运行时ModuleNotFoundError问题

问题场景

项目结构:

── myproject
    ├── mypackage
    │   ├── __init__.py
    │   ├── utils.py
    ├── main.py
    ├── app.py (Flask应用)
  • main.py中的导入语句:from myproject.mypackage.utils import func
  • 单独运行main.py正常,但运行app.py时抛出ModuleNotFoundError: No module named myproject

原因分析

直接运行app.py时,Python会将app.py所在的myproject目录加入模块搜索路径sys.path。此时myproject本身是当前工作目录的一部分,Python无法在搜索路径中找到名为myproject的上级模块,因此报错。而单独运行main.py时,你大概率是在myproject的父目录下执行(比如python myproject/main.py或python -m myproject.main),此时父目录被加入sys.path,所以能正确解析myproject.mypackage的导入。

解决方案

方案1:修改main.py的导入语句(推荐)

因为main.py和mypackage同属myproject目录,直接使用相对当前目录的导入即可:

# main.py中替换原导入语句
from mypackage.utils import func

这种方式符合项目目录结构逻辑,无需额外修改路径,适用性更强。

方案2:在app.py中添加模块搜索路径

如果不想修改main.py的导入逻辑,可以在app.py开头将myproject的父目录加入sys.path:

from flask import Flask, request
import sys
import os

# 将myproject的父目录添加到Python模块搜索路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

import main  

@app.route('/')
def run_job():    
    return main.do_something()

if __name__ == '__main__':
   app.run(debug = True)

注:os.path.abspath(__file__)获取app.py的绝对路径,os.path.dirname()取其所在目录(即myproject),将这个目录加入sys.path后,Python就能识别myproject作为模块。

方案3:使用Python模块方式运行app.py

在myproject的父目录下,通过-m参数以模块方式启动Flask应用:

python -m myproject.app

这种方式会自动将父目录加入sys.path,符合Python模块导入规范,无需修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:25:25