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

GitHub Action工作流出现ModuleNotFoundError问题求助

Flask测试本地通过但GitHub Action中模块找不到的问题

我给Flask应用编写了功能测试,本地执行pytest命令时所有测试均正常通过,但通过GitHub Action工作流运行测试时,相同的测试却失败了,无法找到quizproject中的某个模块。调试后仍未解决,CI失败的具体错误如下:

Run pytest
ImportError while loading conftest '/home/runner/work/quiz-roads/quiz-roads/tests/conftest.py'.
tests/conftest.py:10: in <module>
    from quizproject.models.users import User as NewUser
E   ModuleNotFoundError: No module named 'quizproject.models.users'
Error: Process completed with exit code 4.

我的项目结构如下:

quiz-roads/
|-- requirements.txt
|-- run.py
|-- quizproject/
|   |-- forms/
|   |   |-- form.py
|   |   |-- __init__.py
|   |-- models/
|   |   |-- users.py
|   |   |-- __init__.py
|   |-- templates/
|   |-- static/
|   |-- __init__.py
|   |-- auth.py
|   |-- main.py
|-- tests/
|   |-- functional/
|   |   |-- __init__.py
|   |   |-- test_auth.py
|   |   |-- test_users.py
|   |-- __init__.py
|   |-- conftest.py

GitHub Action工作流配置:

name: 'coverage'
on:
    pull_request:
        branches:
            - master
            - main
jobs:
    coverage:
        runs-on: ubuntu-latest
        strategy:
            fail-fast: false
        steps:
          - uses: actions/checkout@v3
          - name: Set up Python 3.10.6
            uses: actions/setup-python@v3
            with:
              python-version: 3.10.6
          - name: Install dependencies
            run: |
              cd $GITHUB_WORKSPACE
              python -m pip install --upgrade pip
              python -m pip install genbadge[all] pytest coverage
              # if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
              pip install -r requirements.txt
          - name: show python path
            run: |
              python -c "import sys; print('\n'.join(sys.path))"
          - name: Generate report with coverage in the console
            run: |
              pytest
              coverage run -m pytest
              coverage report -m

报错相关的conftest.py代码:

import datetime

import pytest
from sqlalchemy import delete


# import the module
from quizproject import create_app
from quizproject import db as _db
from quizproject.models.users import User as NewUser 
from config import TestingConfig
from werkzeug.security import generate_password_hash


...

需要导入的users.py中的类:

import datetime
from importlib.metadata import MetadataPathFinder
from flask_login import UserMixin
from .. import db


metadata = MetadataPathFinder()


class User(UserMixin, db.Model):
    __tablename__ = "users",
    metadata,
    user_id = db.Column(db.Integer, primary_key=True)
    register_time = db.Column(
        db.DateTime, default=datetime.datetime.utcnow(), nullable=False)
    last_login = db.Column(
        db.DateTime, default=datetime.datetime.utcnow(), nullable=False)
    user_email = db.Column(db.String(100), unique=True, nullable=False)
    user_password = db.Column(db.String(100), nullable=False)
    user_name = db.Column(db.String(1000), unique=True, nullable=False)

    def get_id(self):
        return (self.user_id)

我尝试过将tests文件夹移动到quizproject目录下,但仍然出现相同的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:05:41