Gitlab CI Python运行测试-ModuleNotFoundError:没有名为xxx的模块

时间:2018-09-01 15:59:04

标签: python python-3.x pytest gitlab-ci

我看到了很多有关导入模块错误的问题,但是我无法用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

     

从src.utils.FileManager导入FileManager

第二次进口:

  

从src.dataset.DatasetHelper导入DatasetHelper

第一个文件正在传递,但第二个文件却由于错误而失败:

  

从数据集导入DatasetHelper ModuleNotFoundError:无模块   名为“数据集”

所以问题是,其他模块(如来自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之前的内容是: 当前$ 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以导入。无济于事

2 个答案:

答案 0 :(得分:1)

您可以尝试在 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/

答案 1 :(得分:0)

  

从数据集导入DatasetHelper
  ModuleNotFoundError:没有名为“数据集”的模块

src.__init__中或更可能在src.dataset.__init__中存在导入语句from dataset import DatasetHelper。您必须将其重写为from src.dataset import…

相关问题