ruvnet/RuView · error · ImportError

wifi-densepose 1.x has been superseded by v2.0.0 which wraps

Error message

wifi-densepose 1.x has been superseded by v2.0.0 which wraps the Rust-based stack.

  pip install wifi-densepose==2.0.0

Migration guide: https://github.com/ruvnet/RuView/blob/main/docs/pip-migration.md
Modernization rationale: https://github.com/ruvnet/RuView/blob/main/docs/adr/ADR-117-pip-wifi-densepose-modernization.md
Legacy v1 source (archived): https://github.com/ruvnet/RuView/tree/main/archive/v1

What it means

Deliberate tombstone. The wifi-densepose==1.99.0 PyPI release contains only this module, which raises ImportError unconditionally at import time (ADR-117 §7.2). Its job is to give projects that upgrade from the legacy 1.x Python line a clear migration error instead of a silently broken package. The real implementation lives at wifi-densepose>=2.0.0, a PyO3+maturin build that wraps the Rust stack.

Source

Thrown at python/tombstone/src/wifi_densepose/__init__.py:10

# ADR-117 §7.2 — v1.99.0 tombstone.
#
# This module is part of the `wifi-densepose==1.99.0` PyPI release.
# Its ONLY job is to raise ImportError on import so any project that
# upgraded from the legacy 1.x line gets a clear migration error
# rather than a silent broken import.
#
# The real package lives at `wifi-densepose>=2.0.0` (built by the
# PyO3+maturin pipeline in `python/`).
raise ImportError(
    "wifi-densepose 1.x has been superseded by v2.0.0 which wraps the Rust-based stack.\n"
    "\n"
    "  pip install wifi-densepose==2.0.0\n"
    "\n"
    "Migration guide: https://github.com/ruvnet/RuView/blob/main/docs/pip-migration.md\n"
    "Modernization rationale: https://github.com/ruvnet/RuView/blob/main/docs/adr/ADR-117-pip-wifi-densepose-modernization.md\n"
    "Legacy v1 source (archived): https://github.com/ruvnet/RuView/tree/main/archive/v1\n"
)

View on GitHub (pinned to 4685618388)

Solutions

  1. Install the new line: pip install wifi-densepose==2.0.0 (or add wifi-densepose>=2.0.0 to requirements)
  2. Regenerate the lockfile (pip-compile / poetry lock / uv lock) so the 1.99.0 tombstone is dropped
  3. If a dependency pins wifi-densepose<2, upgrade or relax that constraint
  4. Follow docs/pip-migration.md for API differences between 1.x and 2.x

Example fix

# before
# requirements.txt
wifi-densepose==1.99.0  # import raises the tombstone ImportError

# after
# requirements.txt
wifi-densepose>=2.0.0
Defensive patterns

Strategy: try-catch

Validate before calling

import importlib.metadata as md

version = md.version("wifi-densepose")
if version.startswith("1."):
    raise SystemExit(
        f"wifi-densepose {version} is the 1.x tombstone; "
        "upgrade: pip install wifi-densepose==2.0.0"
    )
import wifi_densepose

Try / catch

try:
    import wifi_densepose
except ImportError as e:
    if "superseded by v2.0.0" in str(e):
        raise SystemExit(
            "Legacy wifi-densepose 1.x is installed. "
            "Run: pip install wifi-densepose==2.0.0"
        )
    raise

Prevention

When it happens

Trigger: Any `import wifi_densepose` (direct or transitive) in an environment where pip resolved the 1.x line: a pin like `wifi-densepose<2` or `~=1.99` in requirements.txt, a stale lockfile, or a cached 1.99.0 wheel in CI.

Common situations: Upgrading an app that pinned 1.x; a transitive dependency constraining wifi-densepose<2; CI layer caches serving the old wheel; deploying from a requirements snapshot taken before the 2.0 release.

Related errors


AI-assisted analysis of ruvnet/RuView@4685618388 (2026-08-16). Data as JSON: /api/errors/5fd0542a83885121. Report an issue: GitHub.