Gitlab CI Python运行测试-ModuleNotFoundError:没有名为xxx的模块
我看到了很多关于导入模块错误的问题,但我无法用Gitlab CI管道解决这个问题 我的项目结构: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
├───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")
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命令,并将前缀
添加到tests目录中的导入。没用src
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
。这将确保您的库已安装。