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
相关产品推荐
相关产品推荐

