GitLab CI/CD执行pytest报错:找不到'main'模块,本地运行正常
GitLab CI/CD 流水线导入模块失败的解决办法
本地在项目根目录运行pytest无异常,但GitLab CI执行时抛出ModuleNotFoundError: No module named 'main',本质是CI环境中Python未将src目录纳入模块搜索路径,以下是三种可行解决方法:
方法一:在CI脚本中添加PYTHONPATH环境变量
直接在CI执行pytest前,将项目的src目录添加到Python的模块搜索路径中:
修改.gitlab-ci.yml的script部分:
image: python:3.10.9 before_script: - pip install --upgrade pip - pip install pytest stages: - unit unit-tests: stage: unit image: python:3.10.9 script: - export PYTHONPATH="$PYTHONPATH:$PWD/src" - pytest -v allow_failure: true
方法二:通过setup.py安装项目为可编辑模式
利用项目已有的setup.py,在CI环境中安装项目为可编辑模式,让Python自动识别main模块:
更新.gitlab-ci.yml的before_script:
image: python:3.10.9 before_script: - pip install --upgrade pip - pip install pytest - pip install -e . # 安装当前项目,支持实时修改 stages: - unit unit-tests: stage: unit image: python:3.10.9 script: - pytest -v allow_failure: true
这种方法更符合Python项目规范,同时能处理项目依赖,推荐优先使用。
方法三:调整测试文件的相对导入路径
修改src/test/test_cleaning.py的导入语句为相对导入,适配包结构:
from ..main.cleaning.clean_txt import clean as ctxt
注意:使用相对导入后,需确保在项目根目录执行pytest,否则可能出现导入错误。
内容的提问来源于stack exchange,提问作者Jared
相关产品推荐
相关产品推荐

