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

Flask应用测试时模块导入失败求助(兼容Docker部署)

解决方案

针对测试时的模块导入错误,同时保证现有Docker部署不受影响,提供以下三种可行方案:

方案一:运行测试时临时设置PYTHONPATH(无需改动代码/配置)

在项目根目录(project文件夹下)执行测试命令时,将src目录添加到Python的模块搜索路径:

PYTHONPATH=$(pwd)/src python3 -m unittest discover tests

原理:测试时Python会从src目录加载kafka_handler模块,匹配app.py中的导入语句;Docker部署时,src内容直接放在/app目录下,PYTHONPATH=/app的配置依然能让导入正常工作。

方案二:在测试目录中自动添加路径(无需每次设置环境变量)

在tests/__init__.py中添加以下代码,自动将src目录加入模块搜索路径:

import sys
from pathlib import Path

# 定位到项目根目录下的src文件夹
src_path = str(Path(__file__).resolve().parent.parent / "src")
if src_path not in sys.path:
    sys.path.append(src_path)

原理:运行测试时,Python会自动加载tests/__init__.py,将src目录加入搜索路径,后续直接执行python3 -m unittest discover tests即可,Docker部署完全不受影响。

方案三:调整导入方式与Docker启动命令(符合Python包规范)

  1. 修改src/app.py中的导入为相对导入:
    from .kafka_handler import KafkaReceiver, KafkaSender, logger
    
  2. 修改Dockerfile的启动命令为模块模式:
    CMD ["python", "-m", "app"]
    

原理:相对导入仅在包结构内有效,Docker中以模块方式启动时,Python会将/app视为包目录,匹配相对导入规则;测试时从src.app导入应用,相对导入同样能找到同目录的kafka_handler。此方案更规范,但需要调整Docker启动命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:55:22