Gitlab CI Python运行测试-ModuleNotFoundError:没有名为xxx的模块
Posted
技术标签:
【中文标题】Gitlab CI Python运行测试-ModuleNotFoundError:没有名为xxx的模块【英文标题】:Gitlab CI Python run test - ModuleNotFoundError: No module named xxx 【发布时间】:2018-09-01 15:59:04 【问题描述】:我看到很多关于导入模块错误的问题,但我无法解决 Gitlab CI 管道的问题。
我的项目结构:
├───config
├───docs
├───src
__init__.py
│ ├───dataset
__init__.py
│ ├───exceptions
│ ├───resources
│ └───utils
__init__.py
└───tests
__init__.py
└───resources
__init__.py
我想使用 pytest 运行测试。
我调用此命令python -m pytest -p no:cacheprovider
或使用 unittest
'python -m unittest discover -v' 从根目录并尝试从测试目录调用。在这两种情况下,我从数据集模块导入类都有问题。有趣的是,我有两个测试文件。
第一个文件导入:
import os import unittest
from src.utils.FileManager import FileManager
第二次进口:
from src.dataset.DatasetHelper import DatasetHelper
第一个文件通过但第二个文件失败并出现错误:
从数据集导入 DatasetHelper ModuleNotFoundError: No module 命名为“数据集”
所以问题是其他模块(如来自 src 的 utils)被正确导入,只有数据集有问题。我在这几天苦苦挣扎,我完全没有想法。我还尝试从 src.dataset 更改而不是从数据集更改。它没有用。我可以通过单击鼠标右键在 PyCharm 中运行测试,只运行测试,但不能在 CI 环境中运行。
我尝试了什么:
向 $PYTHONPATH 添加模块,例如sys.path.insert(0, "/builds/USER/PROJECT/src/dataset")
sys.path.insert(0, "/builds/USER/PROJECT/src")
sys.path.insert(0, "/builds//USER/PROJECT/tests")
PYTHONPATH 添加前的内容为:
Current $PYTHONPATH: ['/builds/USER/PROJECT/config', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages']
列表中的第一个模块是 config,因为我从该目录运行脚本以将上述模块添加到路径。没用
从根目录运行测试命令并添加前缀src
到测试目录中的导入。没有帮助
【问题讨论】:
查看此问题,了解No module named
问题的不同解决方案:PATH issue with pytest 'ImportError: No module named YadaYadaYada'。你已经用不必要的__init__.py
文件破坏了你的项目,也不需要sys.path
操作。
正确的做法是在您的 CI 中使用 setup.py
并使用 python setup.py develop
。这将确保您的库已安装。
【参考方案1】:
从数据集导入 DatasetHelper ModuleNotFoundError: 没有名为“数据集”的模块
在src.__init__
或更可能在src.dataset.__init__
中都有导入语句from dataset import DatasetHelper
。您必须将其重写为from src.dataset import…
【讨论】:
【参考方案2】:您可以尝试在 tests 目录内的 __init__.py
文件中使用相对导入。
语法取决于当前位置以及您尝试导入的模块、包或对象的当前位置。以下是一些示例:
from .some_module import some_class
from ..some_package import some_function
from . import some_class
来源:https://realpython.com/absolute-vs-relative-python-imports/
【讨论】:
以上是关于Gitlab CI Python运行测试-ModuleNotFoundError:没有名为xxx的模块的主要内容,如果未能解决你的问题,请参考以下文章