diff --git a/_Pre_Builds/_Build_Scripts/build_utils.py b/_Pre_Builds/_Build_Scripts/build_utils.py index aa44165..4e756c4 100644 --- a/_Pre_Builds/_Build_Scripts/build_utils.py +++ b/_Pre_Builds/_Build_Scripts/build_utils.py @@ -252,7 +252,7 @@ def install_platform_packages(): def install_spconv(): """Simple spconv installation with correct CUDA version""" - # Check if spconv is already installed + # Check if spconv is already installed and working try: import spconv.core_cc print("spconv is already installed and working") @@ -265,8 +265,17 @@ def install_spconv(): print("No spconv_cuda_mapping in config, skipping spconv installation") return True - # Convert CUDA_VERSION (e.g. cu128 -> 12.8) for lookup - cuda_version_for_lookup = CUDA_VERSION[2:3] + '.' + CUDA_VERSION[3:] + # Fix CUDA version parsing: cu128 -> 12.8, cu121 -> 12.1, cu118 -> 11.8 + if len(CUDA_VERSION) >= 5: # e.g., cu128, cu121 + major = CUDA_VERSION[2:-1] # cu128 -> 12, cu121 -> 12, cu118 -> 11 + minor = CUDA_VERSION[-1] # cu128 -> 8, cu121 -> 1, cu118 -> 8 + cuda_version_for_lookup = f"{major}.{minor}" + else: + print(f"Invalid CUDA_VERSION format: {CUDA_VERSION}") + return False + + print(f"Detected CUDA version: {cuda_version_for_lookup}") + cuda_suffix = build_config.spconv_cuda_mapping.get(cuda_version_for_lookup) if not cuda_suffix: @@ -294,6 +303,16 @@ def install_spconv(): print(f"spconv installed but verification failed: {e}") return False +def check_spconv_after_wheels(): + """Check if spconv works after wheels installation""" + try: + import spconv.core_cc + print("spconv is working after wheels installation") + return True + except ImportError: + print("spconv not working, will install from mapping") + return False + def wheels_dir_exists_and_not_empty(builds_dir): if not os.path.exists(builds_dir): return False diff --git a/install.py b/install.py index e81467f..96fe516 100644 --- a/install.py +++ b/install.py @@ -23,6 +23,7 @@ try: install_remote_packages, install_platform_packages, install_spconv, + check_spconv_after_wheels, wheels_dir_exists_and_not_empty, build_config, PYTHON_PATH, @@ -142,8 +143,12 @@ try: # Step 1: Try wheels first wheels_success = try_wheels_first_approach() - # Step 2: Install missing packages (like spconv) - spconv_success = install_spconv() + # Step 2: Check if spconv works after wheels, install if needed + if wheels_success and check_spconv_after_wheels(): + spconv_success = True + else: + # Install spconv using CUDA mapping + spconv_success = install_spconv() # Step 3: If wheels failed, try building if not wheels_success: @@ -152,6 +157,11 @@ try: install_local_wheels(builds_dir) wheels_success = True cstr("Successfully built and installed wheels").msg.print() + # Check spconv again after building + if not check_spconv_after_wheels(): + spconv_success = install_spconv() + else: + spconv_success = True else: cstr("Building wheels also failed").error.print()