提问人:Petra Barus 提问时间:11/16/2023 更新时间:11/16/2023 访问量:64
运行 coverage 时的 ModuleNotFoundError run -m pytest 。在 GitHub Actions 中
ModuleNotFoundError when running coverage run -m pytest . in GitHub Actions
问:
我有一个非常简单的项目,如下所示
//
├─ src/
│ ├─ sample/
│ │ ├─ __init__.py
│ │ ├─ simple.py
├─ tests/
│ ├─ __init__.py
│ ├─ test_simple.py
当我尝试在本地笔记本电脑上运行下面的 coverage 命令时,它运行正常并生成coverage.xml
coverage run -m pytest . && coverage xml
但是当我使用下面的配置在 GitHub 操作中运行时,它会返回错误
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pytest coverage
- name: Run test
run: |
coverage run -m pytest .
coverage xml
错误如下
Run coverage run -m pytest .
============================= test session starts ==============================
platform linux -- Python 3.11.6, pytest-7.4.3, pluggy-1.3.0
rootdir: /home/runner/work/openapi-splitter/openapi-splitter
collected 0 items / 1 error
==================================== ERRORS ====================================
____________________ ERROR collecting tests/test_simple.py _____________________
ImportError while importing test module '/home/runner/work/openapi-splitter/openapi-splitter/tests/test_simple.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/opt/hostedtoolcache/Python/3.11.6/x64/lib/python3.11/importlib/__init__.py:126: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
tests/test_simple.py:7: in <module>
from sample.simple import add_one
E ModuleNotFoundError: No module named 'sample'
=========================== short test summary info ============================
ERROR tests/test_simple.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.11s ===============================
为什么会发生这种情况以及如何解决此问题?
答:
1赞
JustLearning
11/16/2023
#1
在您的文件中,正确的导入应该是test_simple
from src.sample.simple import add_one
包含在执行操作的目录中。src
编辑:
如果你想成为项目的顶层,请做著名的包喜欢做的事情:将事物命名为预期的包名称,和/或删除:sample
numpy
src
//
├─ sample/
│ ├─ __init__.py
│ ├─ simple.py
├─ tests/
│ ├─ __init__.py
│ ├─ test_simple.py
where now 是包的名称。然后,您的操作脚本将起作用。sample
评论
0赞
Ned Batchelder
11/16/2023
src
不是要这样导入的。这是一个包含源代码的目录,但使用它的全部意义在于避免意外导入。
1赞
JustLearning
11/16/2023
这是程序员的决定。到目前为止,最常见的选择是将该文件夹命名为包的名称,例如 .作为一名C++程序员,我敢打赌,使用只是从更低级/编译的语言带来的一种习惯。对于OP的问题,另一种解决方案可能是简单地提高一个级别,完全删除.这将使代码与当前管道一起使用。numpy
src
sample
src
0赞
Ned Batchelder
11/16/2023
#2
听起来您尚未在 GitHub 操作中安装代码,而且我在您的示例中没有看到您在哪里安装代码。您已经在本地安装了它,现在您需要在操作中添加一个步骤以在此处安装它。
评论
sys.path
sample.simple
//
src
src.sample.simple
__init__.py
src directory