vllm-project/vllm · error · ValueError

No compatible wheel found for {arch} at {simple_url}

Error message

No compatible wheel found for {arch} at {simple_url}

What it means

Raised in setup.py's wheel-link parser (line 815): after fetching a PEP 503 simple index page (`simple_url`) and parsing its wheel hrefs, no wheel filename contains the machine architecture tag `arch` (e.g. `linux_x86_64`, `manylinux2014_aarch64`). It means the index was reachable but has no wheel matching your platform.

Source

Thrown at setup.py:815

                    for name, value in attrs:
                        if name == "href" and value.endswith(".whl"):
                            self.wheels.append(value)

        simple_url = f"{index_url.rstrip('/')}/{package}/"
        print(f"Fetching wheel list from {simple_url}")
        with urlopen(simple_url) as resp:
            html = resp.read().decode("utf-8")

        parser = WheelLinkParser()
        parser.feed(html)

        for wheel in reversed(parser.wheels):
            if arch in wheel:
                if wheel.startswith("http"):
                    return wheel
                return urljoin(simple_url, wheel)

        raise ValueError(f"No compatible wheel found for {arch} at {simple_url}")

    @staticmethod
    def determine_wheel_url_rocm() -> tuple[str, str | None]:
        """Determine the precompiled wheel for ROCm."""
        # Search for local wheel first
        local_wheel = precompiled_wheel_utils.find_local_rocm_wheel()
        if local_wheel is not None:
            print(f"Found local ROCm wheel: {local_wheel}")
            return local_wheel, None

        import platform

        arch = platform.machine()
        commit = os.getenv("VLLM_PRECOMPILED_WHEEL_COMMIT", "").lower()
        if not commit or len(commit) != 40:
            print(
                f"VLLM_PRECOMPILED_WHEEL_COMMIT not valid: {commit}"
                ", trying to fetch base commit in main branch"

View on GitHub (pinned to c794754062)

Solutions

  1. Point the install at an index that hosts wheels for your arch (official PyPI, or the correct arch tag in the override)
  2. Check the parsed page manually (curl the simple_url) to see which platform tags actually exist
  3. If no prebuilt wheel exists for your platform, build from source without the wheel override

Example fix

# before
PIP_INDEX_URL=https://internal-mirror/x86-only/simple pip install vllm
ValueError: No compatible wheel found for manylinux2014_aarch64 ...

# after
PIP_INDEX_URL=https://pypi.org/simple pip install vllm
Defensive patterns

Strategy: fallback

Validate before calling

import platform, urllib.request
machine = platform.machine().lower()  # e.g. x86_64 -> expect manylinux*_x86_64 tags
html = urllib.request.urlopen(simple_url).read().decode()
assert any(machine in href for href in html.split('"')), f"index {simple_url} has no {machine} wheels"

Try / catch

try:
    wheel_url = find_wheel(simple_url, arch)
except ValueError as e:
    # fall back to an index that hosts this arch, or to a source build
    print(f"{e}; falling back to PyPI")
    wheel_url = find_wheel("https://pypi.org/simple/vllm/", arch)

Prevention

When it happens

Trigger: Installing vLLM with a precompiled-wheel override pointing at a simple index that lacks wheels for the current arch — e.g. an x86-only nightly repo queried from an arm64 machine, or a repo that only hosts cu12 wheels while you need a different ABI tag.

Common situations: Apple Silicon or Grace/ARM machines pointed at x86-only internal mirrors; stale internal DevPI/Nexus proxy that has not synced newer arch variants; environment variables (e.g. PIP_INDEX_URL / vLLM wheel-repo override) pointing at a partial mirror.

Related errors


AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14). Data as JSON: /api/errors/a38e620632035f38. Report an issue: GitHub.