Gitlab CI Python run test - ModuleNotFoundError: Нет модуля с именем xxx - PullRequest
0 голосов
/ 01 сентября 2018

Я видел много вопросов об ошибке импорта модулей, но мне не удалось решить проблему с конвейером 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 find -v' из корневого каталога, а также попытался вызвать из тестового каталога. В обоих случаях у меня проблема с импортом класса из модуля набора данных. Что интересно, у меня есть два файла тестов.

Первый импорт файлов:

import os import unittest

из src.utils.FileManager import FileManager

Второй импорт:

из src.dataset.DatasetHelper import DatasetHelper

Первый файл проходит, но второй не удается с ошибкой:

из набора данных импорта. DatasetHelper ModuleNotFoundError: Нет модуля с именем 'набор данных'

Так что дело в том, что другие модули, такие как утилиты из src, импортируются корректно, проблема возникает только с набором данных. Я борюсь с этим несколько дней и у меня совершенно нет идей. Я также попытался изменить вместо набора данных на 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 к импорту в тестовом каталоге. Не помогает

1 Ответ

0 голосов
/ 02 сентября 2018

из набора данных импорта DatasetHelper
ModuleNotFoundError: нет модуля с именем 'набор данных'

В src.__init__ или, более вероятно, в src.dataset.__init__ есть оператор импорта from dataset import DatasetHelper. Вы должны переписать его как from src.dataset import…

...