mirror of
https://github.com/vllm-project/vllm.git
synced 2026-06-06 00:16:14 +00:00
d077622d60
Signed-off-by: mgoin <mgoin64@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
|
|
"""Assert the installed vLLM has a `_C.cpython-X.Y-*.so` for every CPython
|
|
covered by `requires-python`. Fails closed if a Python's `.so` is missing
|
|
from the wheel — i.e. the regression that surfaced in #41476/#41512.
|
|
|
|
Run from a CI test job after vLLM is installed, e.g. the H100 deepgemm
|
|
kernel tests in .buildkite/test_areas/kernels.yaml.
|
|
"""
|
|
|
|
import importlib.util
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import regex as re
|
|
import tomllib
|
|
|
|
SO_RE = re.compile(r"^_C\.cpython-(\d)(\d+)-")
|
|
|
|
|
|
def required_pythons() -> list[str]:
|
|
pyproject = Path(__file__).resolve().parent.parent / "pyproject.toml"
|
|
spec = tomllib.loads(pyproject.read_text())["project"]["requires-python"]
|
|
m = re.match(r">=3\.(\d+),<3\.(\d+)", spec)
|
|
if not m:
|
|
sys.exit(f"unexpected requires-python format: {spec!r}")
|
|
return [f"3.{v}" for v in range(int(m[1]), int(m[2]))]
|
|
|
|
|
|
spec = importlib.util.find_spec("vllm.third_party.deep_gemm")
|
|
if spec is None or spec.origin is None:
|
|
sys.exit("vllm.third_party.deep_gemm not importable; is vllm installed?")
|
|
pkg_dir = Path(spec.origin).parent
|
|
|
|
found = {f"{m[1]}.{m[2]}" for f in os.listdir(pkg_dir) if (m := SO_RE.match(f))}
|
|
required = required_pythons()
|
|
missing = [v for v in required if v not in found]
|
|
print(f"deepgemm _C: found {sorted(found)}, required {required}, missing {missing}")
|
|
sys.exit(1 if missing else 0)
|