我看到了很多有关导入模块错误的问题,但是我无法用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环境中运行测试。
我尝试过的事情:
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
以导入。无济于事答案 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…