pytest-dev/pytest · warning · Skipped

module {modname!r} has __version__ {verattr!r}, required is:

Error message

module {modname!r} has __version__ {verattr!r}, required is: {minversion!r}

What it means

pytest.importorskip(modname, minversion=X) raises Skipped (a skip outcome) when the imported module's __version__ attribute is missing or older than minversion. This is a controlled skip, not a hard failure, so the test is reported as skipped with the version mismatch detail.

Source

Thrown at src/_pytest/outcomes.py:282

            importlib.import_module(modname)
        except exc_type as exc:
            # Do not raise or issue warnings inside the catch_warnings() block.
            if reason is None:
                reason = f"could not import {modname!r}: {exc}"
            skipped = Skipped(reason, allow_module_level=True)
    if skipped:
        raise skipped

    mod = sys.modules[modname]
    if minversion is None:
        return mod
    verattr = getattr(mod, "__version__", None)
    if minversion is not None:
        # Imported lazily to improve start-up time.
        from packaging.version import Version

        if verattr is None or Version(verattr) < Version(minversion):
            raise Skipped(
                f"module {modname!r} has __version__ {verattr!r}, required is: {minversion!r}",
                allow_module_level=True,
            )
    return mod

View on GitHub (pinned to 98b357f69e)

Solutions

  1. Upgrade the dependency to a version meeting minversion
  2. Lower the minversion argument to match what is installed
  3. Ensure the module exposes a PEP 440-compliant __version__

Example fix

// before
lib = pytest.importorskip('mymod', minversion='2.0')
// after
lib = pytest.importorskip('mymod', minversion='1.5')
Defensive patterns

Strategy: validation

Validate before calling

def importorskip_version(modname, minversion):
    import importlib, sys
    from packaging.version import Version
    mod = importlib.import_module(modname)
    ver = getattr(mod, '__version__', None)
    if ver is None or Version(ver) < Version(minversion):
        import pytest; pytest.skip(f'{modname} {ver} < {minversion}')
    return mod

Type guard

def module_satisfies(modname, minversion) -> bool:
    import importlib
    from packaging.version import Version
    mod = importlib.import_module(modname)
    ver = getattr(mod, '__version__', None)
    return ver is not None and Version(ver) >= Version(minversion)

Prevention

When it happens

Trigger: pytest.importorskip('numpy', minversion='1.20') when numpy.__version__ is older than 1.20, or when the module exposes no __version__ attribute at all.

Common situations: Dependency version mismatches in CI matrices, modules that do not define __version__ (some C extensions or older libs), pinned outdated deps.

Related errors


AI-assisted analysis of pytest-dev/pytest@98b357f69e (2026-08-04). Data as JSON: /data/errors/93c3b228477f5c24.json. Report an issue: GitHub.