travis-ci - pytest 因 ModuleNotFoundError 和未使用插件的名称而失败

标签 travis-ci pytest conda python-hypothesis

我维护一个开源库,xarray ,它使用 pytest 在 Travis-CI 上运行集成测试。我们使用 stack conda 安装科学 Python。

Earlier today ,我们五个测试版本中的两个(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'

有几件事让我感到惊讶:
  • 我们不使用假设或安装 hypothesis.extra.pytestplugin .我不知道这是从哪里来的。
  • 没有任何明显的改变来触发这个错误。它首先出现在 one line doc change 之后.安装的 Python 库,包括 conda 安装的特定二进制构建,看起来完全相同。 (不过,如果您愿意,您可以 diff build outputs 自己。)

  • 如果您对正在发生的事情有任何线索或猜测,我们将不胜感激!我什至不知道在堆栈中的哪个位置提交错误。

    最佳答案

    我深入研究了一下:

  • Conda forge 给我们 hypothesis: 3.33.0-py36_0pytest正在加载它作为插件
  • 固定 hypothesis 的 conda 版本至 3.23纠正问题。
  • 卸载假设解决问题
  • pip安装假设解决问题

  • 因此,我认为我们可以得出结论,假设的 conda-forge 构建出了问题。
    conda-forge 上有一个 Unresolved 问题页面:

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

    关于travis-ci - pytest 因 ModuleNotFoundError 和未使用插件的名称而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46923840/

    相关文章:

    python - 当 py.test 测试失败时,PyCharm 可以进入调试吗

    python - Windows 中的 Jenkins 在激活 Python VENV 后停止

    postgresql - Geodjango导入django.contrib.gis.gdal时出现异常: OSError:/usr/lib/libgdal. so.1: undefined symbol :sqlite3_column_table_name

    python - 运行命令 "conda env create -f environment.yml"后发出警告

    numpy - Conda 强制 numpy 和 scipy 从 openblas 降级到非工作 mkl 版本

    git - 用嵌套存储库工作流程替换 git 子模块

    javascript - Mocha 测试在本地通过,但在 Travis CI 上失败

    python - 从 fixture 返回结构化数据的正确方法是什么?

    rust - 如何让 Travis CI 与 Rust 0.12.0 和 Cargo 一起工作?

    python - travis-ci build on Python3.4 六个 urllib 不会安装