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

Flask通过Python运行正常,命令行启动报ModuleNotFoundError问题

Flask命令行启动导入失败的成因与解决

问题成因

直接运行python main.py和用Flask命令启动的核心差异在于Python的模块搜索路径(sys.path)不同:

  • 执行python main.py时,Python会自动把当前工作目录(即main.py所在的api_v2目录)加入sys.path,所以同目录下的logger.py、routes包能被直接找到。
  • Flask命令启动时,它是将你的代码作为命名包导入的(错误信息里的api_v2.main就是明证),此时Python的模块搜索路径起始于项目根目录(/REPO),而非api_v2子目录。这时候直接写from logger import setup_logger,Python会在根目录下找logger模块,自然找不到。

解决方法

方法1:修正导入语句(推荐)

改成相对导入或绝对导入,符合Python包规范:

  • 相对导入(基于当前包目录):
    # main.py里的导入修改为
    from .logger import setup_logger
    from .routes import all_routes
    
    注意:相对导入只能在包内部使用,直接运行python main.py时可能会报错,此时可将代码当作包运行:python -m api_v2.main。
  • 绝对导入(基于包全名):
    # main.py里的导入修改为
    from api_v2.logger import setup_logger
    from api_v2.routes import all_routes
    
    这种方式需要确保/REPO目录在sys.path中(一般启动时Python会自动把当前工作目录加入,只要你在/REPO目录下执行Flask命令即可)。

方法2:调整启动时的工作目录

切换到main.py所在的api_v2目录,再设置FLASK_APP并启动:

cd /REPO/api_v2
export FLASK_APP=main.py
flask run

这种方式无需修改代码,但不够规范,不推荐用于生产环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:40:07