2017-10-25 10 views
6

Prowadzę bibliotekę open source, xarray, która uruchamia testy integracyjne w Travis-CI przy użyciu pytest. Instalujemy naukowy Python przy użyciu warunku stosu.Pestest kończy się niepowodzeniem z ModuleNotFoundError i nazwą nieużywanej wtyczki

Earlier today, nasze dwie z naszych pięciu testowych wersji (Python 3.5 i 3.6, ale nie Python 2.7 lub 3.4) zaczęły działać bez wyraźnego powodu. pytest sama nie powiedzie się, a do końca zrozumiały trackback:

$ 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' 

Kilka rzeczy są zaskakujące rzeczy mi o to:

  1. Nie używamy hipotezę lub zainstalować hypothesis.extra.pytestplugin. Nie mam pojęcia, skąd się to wzięło.
  2. Nie ma nic, co by się zmieniło, aby wywołać ten błąd. Po raz pierwszy pojawił się po one line doc change. Zainstalowane biblioteki Pythona, w tym specyficzne konstrukcje binarne instalowane przez conda, wydają się być dokładnie takie same. (Można diff the build outputs siebie jeśli chcesz, choć.)

Jeśli masz jakieś wskazówki lub przypuszczenia o tym, co się dzieje, że twoja pomoc będzie mile widziana! Nie wiem nawet, gdzie na stosie można złożyć błąd.

Odpowiedz

2

I wykopali w tym kawałku:

  • Conda Forge daje nam hypothesis: 3.33.0-py36_0 i pytest się ładuje go jako plugin
  • Przypinanie wersję Conda z hypothesis do 3.23 koryguje problem.
  • Odinstalowanie hipoteza rozwiązuje problem
  • Pip instalowanie hipoteza rozwiązuje problem

Tak, myślę, że możemy stwierdzić, coś poszło nie tak z kompilacji Conda-kuźni hipotezy.

Jest kwestią otwartą na stronie conda-forge na to:

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

Powiązane problemy