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

Flask运行测试时无法导入根目录application模块报错排查

问题描述

我的项目文件夹结构如下图所示:

目录结构示意图

根目录下的application.py文件中使用工厂方法create_app()创建Flask实例,代码如下:

# application.py
def create_app():
    flask_app = Flask(__name__)
    return flask_app


app = create_app()

# --- Import Routes ---
from src.routes import *

if __name__ == "__main__":
    app.run()

tests测试文件夹下的测试代码如下:

# /tests/test.py
from application import create_app


def test_root_route():
    flask_app = create_app()
    with flask_app.test_client() as test_client:
        response = test_client.get('/')
        assert response.status_code == 200

运行测试时抛出如下错误:

from application import create_app
ModuleNotFoundError: No module named 'application'

限制条件:受服务器运行要求限制,无法修改现有文件夹结构,application.py必须放置在项目根目录。

报错原因

Python导入模块时会从sys.path记录的路径列表里搜索目标模块。直接运行tests目录下的测试文件时,Python默认会把测试文件所在的tests目录加入搜索路径,而项目根目录不在搜索列表里,自然找不到根目录下的application.py。

可行解决方案

以下方案均不需要调整现有目录结构,符合部署要求:

  • 运行测试时临时指定PYTHONPATH
    在项目根目录下执行测试命令时,手动把根目录加入Python模块搜索路径:

    • Mac/Linux 终端:
      PYTHONPATH=. pytest tests/
      
    • Windows CMD:
      set PYTHONPATH=. && pytest tests/
      
    • Windows PowerShell:
      $env:PYTHONPATH="."; pytest tests/
      
  • 测试文件开头动态添加根目录到搜索路径
    在tests/test.py所有业务导入语句的最前面,加入如下代码,运行时自动把项目根目录加入搜索路径:

    import sys
    from pathlib import Path
    # 取当前测试文件的上级目录(即项目根目录)加入搜索路径
    sys.path.append(str(Path(__file__).parent.parent.resolve()))
    
    # 后面再写原有导入逻辑
    from application import create_app
    
  • 添加pytest配置自动识别根目录
    在项目根目录新建pytest.ini配置文件,写入以下内容,后续执行pytest时会自动把根目录加入模块搜索路径,不需要额外加参数:

    [pytest]
    pythonpath = .
    testpaths = tests
    

    配置完成后直接在根目录执行pytest命令即可正常运行测试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:42:16