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

Gitlab CI Python运行测试-ModuleNotFoundError:没有名为xxx的模块,python,python-3.x,pytest,gitlab-ci,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

我看到了很多关于导入模块错误的问题,但我无法用Gitlab CI管道解决这个问题

我的项目结构:

├───config
├───docs
├───src
    __init__.py
│   ├───dataset
        __init__.py
│   ├───exceptions
│   ├───resources
│   └───utils
        __init__.py
└───tests
    __init__.py
    └───resources
__init__.py
我想使用pytest运行测试。 我调用这个命令
python-mpytest-pno:cacheprovider
或使用unittest “python-m unittest discover-v”并尝试从根目录调用。在这两种情况下,从dataset模块导入类都有问题。有趣的是,我有两个测试文件

第一个文件导入:

import os import unittest

from src.utils.FileManager import FileManager
第二项进口:

from src.dataset.DatasetHelper import DatasetHelper
第一个文件正在通过,但第二个文件失败,出现错误:

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

所以问题是,其他模块,比如src中的utils,都被正确导入了,只有数据集有问题。我挣扎了几天,我完全失去了想法。我还尝试将数据集改为src.dataset,而不是从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,因为我从这个目录运行脚本来将上面的模块添加到path。没用

  • 从根目录运行test命令,并将前缀
    src
    添加到tests目录中的导入。没用
从数据集导入DatasetHelper
ModuleNotFoundError:没有名为“dataset”的模块


src.\uuuu init\uuuu
中,或者在
src.dataset.\uuuu init\uuuu
中,可能存在来自数据集导入数据集的导入语句
。您必须从src.dataset import将其重写为

您可以尝试在
\uuuu init\uuuuuuuuy.py
文件中使用相对导入,该文件位于tests目录中

语法取决于当前位置以及要导入的模块、包或对象的当前位置。以下是一些例子:

from .some_module import some_class
from ..some_package import some_function
from . import some_class

来源:

查看此问题,了解
无模块名问题的不同解决方案:
。您已经用不必要的
\uuu init\uuuuuuuupy
文件来结束项目,而且不需要进行
sys.path
操作。正确的方法是在CI中使用
setup.py
并执行
python setup.py develop
。这将确保您的库已安装。