Сбой pytest с ModuleNotFoundError и именем неиспользуемого плагина

Я поддерживаю библиотеку с открытым исходным кодом, xarray, которая выполняет интеграционные тесты на Travis-CI с использованием pytest. Мы устанавливаем научный Python, используя стек conda.

Ранее сегодня наши две из пяти тестовых сборок (Python 3.5 и 3.6, но не Python 2.7 или 3.4) начали давать сбой без видимой причины. Сам pytest не удается, с загадочным трекбэком:

$ py.test xarray --cov=xarray --cov-config ci/.coveragerc --cov-report term-missing --verbose $EXTRA_FLAGS
Traceback (most recent call last):
  File "/home/travis/miniconda/envs/test_env/bin/py.test", line 6, in <module>
    sys.exit(py.test.main())
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/config.py", line 49, in main
    config = _prepareconfig(args, plugins)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/config.py", line 168, in _prepareconfig
    pluginmanager=pluginmanager, args=args)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 745, in __call__
    return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 339, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 334, in <lambda>
    _MultiCall(methods, kwargs, hook.spec_opts).execute()
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 613, in execute
    return _wrapped_call(hook_impl.function(*args), self.execute)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 250, in _wrapped_call
    wrap_controller.send(call_outcome)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/helpconfig.py", line 68, in pytest_cmdline_parse
    config = outcome.get_result()
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 279, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 265, in __init__
    self.result = func()
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 614, in execute
    res = hook_impl.function(*args)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/config.py", line 957, in pytest_cmdline_parse
    self.parse(args)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/config.py", line 1121, in parse
    self._preparse(args, addopts=addopts)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/config.py", line 1084, in _preparse
    self.pluginmanager.load_setuptools_entrypoints('pytest11')
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 510, in load_setuptools_entrypoints
    plugin = ep.load()
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2409, in load
    return self.resolve()
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2415, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
ModuleNotFoundError: No module named 'hypothesis.extra.pytestplugin'

Несколько вещей удивляют меня по этому поводу:

  1. Мы не используем гипотезу и не устанавливаем hypothesis.extra.pytestplugin, Я понятия не имею, откуда это взялось.
  2. Там нет ничего очевидного, что изменилось, чтобы вызвать эту ошибку. Впервые он появился после смены документа в одну строку. Установленные библиотеки Python, включая конкретные двоичные сборки, установленные conda, выглядят точно так же. (Вы можете diff если хотите, сборка выводит сама.)

Если у вас есть какие-либо подсказки или предположения о том, что происходит, ваша помощь будет принята с благодарностью! Я даже не знаю, где в стеке подать ошибку.

1 ответ

Я немного углубился в это:

  • Конда кузница дает нам hypothesis: 3.33.0-py36_0 а также pytest загружает его как плагин
  • Закрепление версии Конда hypothesis в 3.23 исправляет проблему.
  • Удаление гипотезы решает проблему
  • Гипотеза установки пипса решает проблему

Итак, я думаю, что мы можем заключить, что что-то пошло не так с гипотезой Конда-Форджа.

Существует открытый вопрос по conda-forge страница для этого:

https://github.com/conda-forge/hypothesis-feedstock/issues/16

Другие вопросы по тегам