Docker中Flask集成测试无法从app.py导入create_app,求解决方案
解决Docker中Flask集成测试导入create_app失败的问题
问题根源
直接运行test.py时,Python的模块搜索路径默认不包含/server目录,导致无法找到app.py;而相对导入仅适用于包内部,直接执行脚本时无法生效(因为脚本不属于包的一部分)。
具体解决方法
方法1:在测试脚本中手动添加Python路径
在test.py开头添加代码,将/server目录加入Python的模块搜索路径:
import sys from pathlib import Path # 获取server目录的绝对路径并添加到sys.path server_dir = Path(__file__).resolve().parent.parent.parent sys.path.append(str(server_dir)) from app import create_app
Path(__file__).resolve():获取test.py的绝对路径- 多次调用
parent:从test/integration/test.py向上回溯到server目录
方法2:设置PYTHONPATH环境变量
在Docker中运行测试时,先指定PYTHONPATH为/server,让Python自动搜索该目录下的模块:
临时设置(运行命令时添加)
PYTHONPATH=/server python /server/test/integration/test.py
永久设置(写入Dockerfile)
在Dockerfile中添加环境变量配置:
ENV PYTHONPATH=/server
之后直接运行测试脚本即可正常导入。
方法3:将项目转为可安装包(适合长期维护的项目)
在/server目录下创建setup.py文件:
from setuptools import setup, find_packages setup( name="flask_server", version="0.1", packages=find_packages(), )
然后在Docker中以开发模式安装这个包:
pip install -e /server
安装后,Python会将server目录识别为正式包,无论从哪个路径运行测试,都可以直接使用from app import create_app。
内容的提问来源于stack exchange,提问作者Michael Paccione
相关产品推荐
相关产品推荐

