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
- Upgrade the dependency to a version meeting minversion
- Lower the minversion argument to match what is installed
- 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
- Pin compatible dependency versions in CI so importorskip minversion matches installed versions
- Ensure modules you gate on expose a PEP 440 __version__
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
- {} expected string as 'msg' parameter, got '{}' instead. Per
- absolute tolerance can't be NaN.
- relative tolerance can't be negative: {relative_tolerance}
- relative tolerance can't be NaN.
- pytest.approx() does not support relative tolerance for date
AI-assisted analysis of pytest-dev/pytest@98b357f69e (2026-08-04).
Data as JSON: /data/errors/93c3b228477f5c24.json.
Report an issue: GitHub.