diff --git a/setup.py b/setup.py index 5673a4a47a..60b08f7773 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,11 @@ import logging import os +import re +import subprocess +import sys + +from packaging.requirements import InvalidRequirement, Requirement from setuptools import setup, find_packages from setuptools_scm import get_version @@ -23,6 +28,13 @@ def get_path(*filepath) -> str: def get_requirements() -> list[str]: """Get Python package dependencies from requirements.txt.""" + def _req_name(line: str) -> str: + """Extract normalized project name from a PEP 508 requirement line.""" + try: + return Requirement(line).name.lower() + except InvalidRequirement: + return "" + def _read_requirements(filename: str) -> list[str]: with open(get_path(filename)) as f: requirements = f.read().strip().split("\n") @@ -32,6 +44,9 @@ def _read_requirements(filename: str) -> list[str]: resolved_requirements += _read_requirements(line.split()[1]) elif line.startswith("--"): continue + elif _req_name(line) == "torchaudio": + raise RuntimeError("To ensure proper installation, torchaudio is handled in setup.py\n" + "Please remove it from requirements.txt") else: resolved_requirements.append(line) return resolved_requirements @@ -40,6 +55,7 @@ def _read_requirements(filename: str) -> list[str]: requirements = _read_requirements("requirements.txt") except ValueError: print("Failed to read requirements.txt in vllm_gaudi.") + return requirements @@ -71,3 +87,29 @@ def _read_requirements(filename: str) -> list[str]: ], }, ) + +# Install torchaudio with --no-deps to avoid pulling CUDA torch. +# Only run during actual install/develop – skip metadata, wheel, and sdist builds. +_PACKAGING_COMMANDS = {"dist_info", "egg_info", "bdist_wheel", "sdist", "build"} +if not _PACKAGING_COMMANDS.intersection(sys.argv): + try: + import torch + except ImportError: + raise RuntimeError( + "torch is not importable - this is needed for torchaudio installation.\n\n" + "********************************************************************************\n" + "Make sure torch is installed before installing vllm-gaudi\n" + "and add --no-build-isolation to pip install\n" + "********************************************************************************\n") from None + # Extract stable x.y.z from versions like 2.10.0a0+git... + ver = re.match(r"(\d+\.\d+\.\d+)", torch.__version__).group(1) + subprocess.check_call([ + sys.executable, + "-m", + "pip", + "install", + "--no-deps", + "--extra-index-url", + "https://download.pytorch.org/whl/cpu", + f"torchaudio=={ver}", + ])