【问题标题】:Cannot import script from repository in pytest using GitHub actions无法使用 GitHub 操作从 pytest 中的存储库导入脚本
【发布时间】:2022-05-10 15:17:39
【问题描述】:

我正在学习使用 GitHub 操作实现自动测试。我正在尝试解决以下导入错误。

错误是:

utils\test_capitalize.py:2: in <module>
    from src.capital import capital_case
E   ModuleNotFoundError: No module named 'src'

我的仓库的结构是:

example/
|-- setup.cfg
|-- setup.py
|-- pyproject.toml
|-- .github/
|   |-- workflows/
|   |   |-- ci.yml
|-- src/
|   |-- capital.py
|-- utils/
|   |-- test_capitalize.py

ci.yml的内容是:

name: ci

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build-and-test:

    runs-on: windows-latest
    strategy:
      matrix:
        python-version: [3.8]
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}
      - name: Build
        run: |
          python -m pip install .
          python -m pip install src
      - name: Test with pytest
        run: |
          python -m pip install pytest
          pytest

我以为python -m pip install . 已经安装了存储库中的所有模块,我对此有误解吗?。

编辑:pytest 文件是一个最小示例(我已尝试在推送之前删除 src):

import pytest
from src.capital import capital_case


def test_capital_case():
    assert capital_case('semaphore') == 'Semaphore'

【问题讨论】:

  • 您的输入语句中不应该有src。在代码中应该是from capital import capital_case。也从ci.yml 中删除python -m pip install src 行,它上面的行是正确的。
  • 在那种情况下我仍然有同样的问题。错误信息是ModuleNotFoundError: No module named 'capital'
  • 我猜它没有在 setup.py 中列出。在 setup 调用中添加 py_modules=['capital']。
  • 是的,这就是问题的原因,谢谢

标签: python github yaml pytest github-actions


【解决方案1】:

在导入模块之前将这些行包含在脚本的标题中。

import sys

sys.path.append("../")

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2023-01-12
  • 1970-01-01
  • 2021-03-23
  • 2020-06-03
  • 2018-04-04
  • 2021-03-13
  • 2020-10-10
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多