Ошибка импорта модуля с Nosetests и Tox - PullRequest
1 голос
/ 16 июня 2020

В своем проекте я использую tox с тестами на нос. Используя PyCharm, мой конвейер токсинов прошел полностью, включая все тесты. Когда я выполняю tox в контейнере Ubuntu18.04 с python3, это дает мне следующую ошибку:

ImportError: Нет модуля с именем my_project

, ведущего к следующая ошибка в конце:

ОШИБКА: InvocationError для команды /.tox/py36/bin/nosetests (завершено с кодом 1)

my_project - это имя модуля, который я тестирую, и структура каталогов выглядит так: /, каталог root, из которого я выполняю tox:

  • my_project /
  • tests /
  • tox.ini
  • setup.cfg
  • другие файлы

Мой tox.ini выглядит следующим образом:

[tox]
envlist = py36

[testenv]
commands = python3 setup.py build
           nosetests
deps = -r{toxinidir}/test-requirements.txt

Я пытался по-разному указать путь к проекту к команде Nosetests, но ничего из этого не сработало. Одна строка, которая меня интересует, находится в исходном выводе tox:

py36 installed: my_project @ file: ///.tox/.tmp/package/1/my_project-0.4.post52. dev256143400.zip,

, что наводит меня на мысль, является ли это причиной того, что ностесты не находят my_project. Для получения подробной информации трассировка стека для ошибки выглядит следующим образом:

ERROR: Failure: ImportError (Нет модуля с именем my_project)

Traceback (последний вызов последним):
Файл "/.tox/py36/lib/python3.6/site-packages/nose/failure.py", строка 39, в runTest поднять self.exc_val.with_traceback (self.tb)
Файл » /.tox/py36/lib/python3.6/site-packages/nose/loader.py ", строка 418, в loadTestsFromName addr.filename, addr.module)
File" /.tox/py36/lib /python3.6/site-packages/nose/importer.py ", строка 47, в importFromPath return self.importFromDir (dir_path, fqname)
File" /.tox/py36/lib/python3.6 /site-packages/nose/importer.py ", строка 79, в importFromDir fh, filename, des c = find_module (часть, путь)
Файл" /usr/lib/python3.6/imp. py ", строка 297, в find_module поднять ImportError (_ERR_MSG.format (name), name = name) ImportError: Нет модуля с именем 'my_project'

1 Ответ

0 голосов
/ 21 июля 2020

Я вижу трех возможных нарушителей.

(1) python3 setup.py build не должно существовать в разделе commands.

# the build command is redundant, there is a special option for this. 
commands = python3 setup.py build
           nosetests
# The install command with it's default
install_command=python -m pip install {opts} {packages}(ARGV)
deps = -r{toxinidir}/test-requirements.txt

(2) А с Pycharm вы могли бы добавить ваш проект как sources root (щелкните правой кнопкой мыши папку> отметьте каталог как> источники root). Или настроил его иначе (возможно, переменная PATH?), Что делает my_project доступным в контексте для его запуска в Pycharm ? Однако этого не должно происходить внутри tox, если только у вас нет внешних белых списков или пакетов сайтов, преобразованных в True ..

Таким образом, при установке в контейнер эта ссылка не существует. Помогите, но обратите внимание на отсутствие setup.py или pyproject.toml. Файлы, используемые для установки my_project. Например, запустите эту команду локально и отладьте вашу установку, если она не работает:

pip install .
...