Win11下通过cuda-toolkit安装CUDA无法找到VS C++工具的问题
问题解决:Conda/Mamba环境激活时VS 2019路径查找错误(已安装VS 2022)
问题背景
在Windows 11系统中,通过mamba install cuda-toolkit==12.1*(conda-forge源)为Python 3.9环境安装CUDA后,激活环境时终端输出大量路径查找错误。已安装兼容的VS 2022 C++工具,但CUDA始终尝试查找VS 2019相关路径,询问是否需要添加路径配置。
终端报错内容(中文翻译)
C:\Users\mluerig>mamba activate my-env C:\Users\mluerig>SET DISTUTILS_USE_SDK=1 C:\Users\mluerig>SET MSSdk=1 C:\Users\mluerig>SET "VS_VERSION=16.0" C:\Users\mluerig>SET "VS_MAJOR=16" C:\Users\mluerig>SET "VS_YEAR=2019" C:\Users\mluerig>set "MSYS2_ARG_CONV_EXCL=/AI;/AL;/OUT;/out" C:\Users\mluerig>set "MSYS2_ENV_CONV_EXCL=CL" C:\Users\mluerig>set "PY_VCRUNTIME_REDIST=\\bin\\vcruntime140.dll" C:\Users\mluerig>set "CXX=cl.exe" C:\Users\mluerig>set "CC=cl.exe" C:\Users\mluerig>set "VSINSTALLDIR=" C:\Users\mluerig>set "NEWER_VS_WITH_OLDER_VC=0" C:\Users\mluerig>for /F "usebackq tokens=*" %i in (`vswhere.exe -nologo -products * -version [16.0,17.0) -property installationPath`) do (set "VSINSTALLDIR=%i\\" ) C:\Users\mluerig>if not exist "" (for /F "usebackq tokens=*" %i in (`vswhere.exe -nologo -products * -requires Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64 -property installationPath`) do ( set "VSINSTALLDIR=%i\\" set "NEWER_VS_WITH_OLDER_VC=1" ) ) C:\Users\mluerig>if not exist "" (for /F "usebackq tokens=*" %i in (`vswhere.exe -nologo -products * -requires Microsoft.VisualStudio.Component.VC.v142.x86.x64 -property installationPath`) do ( set "VSINSTALLDIR=%i\\" set "NEWER_VS_WITH_OLDER_VC=1" ) ) C:\Users\mluerig>if not exist "" (set "VSINSTALLDIR=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\" ) C:\Users\mluerig>if not exist "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\" (set "VSINSTALLDIR=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\" ) C:\Users\mluerig>if not exist "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\" (set "VSINSTALLDIR=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\" ) C:\Users\mluerig>if not exist "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\" (set "VSINSTALLDIR=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\" ) C:\Users\mluerig>IF NOT "" == "" ( set "INCLUDE=;" set "LIB=;" set "CMAKE_PREFIX_PATH=;" ) C:\Users\mluerig>call :GetWin10SdkDir C:\Users\mluerig>call :GetWin10SdkDirHelper HKLM\\SOFTWARE\\Wow6432Node 1>nul 2>&1 C:\Users\mluerig>if errorlevel 1 call :GetWin10SdkDirHelper HKCU\\SOFTWARE\\Wow6432Node 1>nul 2>&1 C:\Users\mluerig>if errorlevel 1 call :GetWin10SdkDirHelper HKLM\\SOFTWARE 1>nul 2>&1 C:\Users\mluerig>if errorlevel 1 call :GetWin10SdkDirHelper HKCU\\SOFTWARE 1>nul 2>&1 C:\Users\mluerig>if errorlevel 1 exit /B 1 C:\Users\mluerig>exit /B 0 C:\Users\mluerig>for /F %i in ('dir /ON /B "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.*"') DO (SET WindowsSDKVer=%~i ) C:\Users\mluerig>(SET WindowsSDKVer=10.0.22621.0 ) C:\Users\mluerig>if errorlevel 1 (echo "未找到任何Windows 10 SDK。不确定能否正常运行,但先尝试..." ) else (echo 找到Windows SDK版本:"10.0.22621.0" ) 找到Windows SDK版本:"10.0.22621.0" C:\Users\mluerig>set "CMAKE_PLAT=x64" C:\Users\mluerig>set "VCVARSBAT=64" C:\Users\mluerig>set "CMAKE_ARGS=-DCMAKE_BUILD_TYPE=Release" C:\Users\mluerig>IF "" == "1" (set "CMAKE_ARGS=-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX= -DCMAKE_PROGRAM_PATH=\\bin;\\Scripts;\\Library\\bin;\\bin;\\Scripts;\\Library\\bin" ) C:\Users\mluerig>IF NOT "win-64" == "win-64" ( set "CONDA_BUILD_CROSS_COMPILATION=1" set "CMAKE_ARGS=-DCMAKE_BUILD_TYPE=Release -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_PROCESSOR=AMD64" ) else (set "CONDA_BUILD_CROSS_COMPILATION=0" ) C:\Users\mluerig>IF 2019 GEQ 2019 ( set "CMAKE_GEN=Visual Studio 16 2019" set "USE_NEW_CMAKE_GEN_SYNTAX=1" ) ELSE ( IF "win-64" == "win-64" (set "CMAKE_GEN=Visual Studio 16 2019 Win64" ) else (set "CMAKE_GEN=Visual Studio 16 2019" ) set "USE_NEW_CMAKE_GEN_SYNTAX=0" ) C:\Users\mluerig>echo "NEWER_VS_WITH_OLDER_VC=0" "NEWER_VS_WITH_OLDER_VC=0" C:\Users\mluerig>if "0" == "1" (set /p NEWER_VS= 0<"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\\\VC\\Auxiliary\\Build\\Microsoft.VCToolsVersion.default.txt" ) C:\Users\mluerig>type "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\\\VC\\Auxiliary\\Build\\Microsoft.VCToolsVersion.default.txt" 系统找不到指定路径。 C:\Users\mluerig>dir "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\\\VC\\Redist\\MSVC\\" 系统找不到指定路径。 C:\Users\mluerig>if "0" == "1" ( echo "" if "~0,4" == "14.2" (set "CMAKE_GEN=Visual Studio 16 2019" ) else (set "CMAKE_GEN=Visual Studio 17 2022" ) set "USE_NEW_CMAKE_GEN_SYNTAX=1" ) C:\Users\mluerig>IF "" == "" SET "CMAKE_GENERATOR=Visual Studio 16 2019" C:\Users\mluerig>IF "1" == "1" ( IF "" == "" SET "CMAKE_GENERATOR_PLATFORM=x64" IF "" == "" SET "CMAKE_GENERATOR_TOOLSET=v142" ) C:\Users\mluerig>pushd C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\ 系统找不到指定路径。 C:\Users\mluerig>CALL "VC\\Auxiliary\\Build\\vcvars64.bat" -vcvars_ver=14.29 10.0.22621.0 系统找不到指定路径。 C:\Users\mluerig>if 1 NEQ 0 (if "" == "" (CALL "VC\\Auxiliary\\Build\\vcvars64.bat" ) ) 系统找不到指定路径。 C:\Users\mluerig>popd C:\Users\mluerig>call :GetWin10SdkDirHelper HKLM\\SOFTWARE\\Wow6432Node 1>nul 2>&1 C:\Users\mluerig>if errorlevel 1 call :GetWin10SdkDirHelper HKCU\\SOFTWARE\\Wow6432Node 1>nul 2>&1 C:\Users\mluerig>if errorlevel 1 call :GetWin10SdkDirHelper HKLM\\SOFTWARE 1>nul 2>&1 C:\Users\mluerig>if errorlevel 1 call :GetWin10SdkDirHelper HKCU\\SOFTWARE 1>nul 2>&1 C:\Users\mluerig>if errorlevel 1 exit /B 1 C:\Users\mluerig>exit /B 0 C:\Users\mluerig>if defined INCLUDE (set "INCLUDE_CONDA_NVCC_BACKUP=" ) C:\Users\mluerig>set "INCLUDE=;\\targets\\x64"
解决方案
不需要手动添加全局路径配置,通过指定环境变量让CUDA工具链识别VS 2022即可:
临时生效(单次激活)
激活环境后,在终端执行以下命令:
set VS_VERSION=17.0 set VS_MAJOR=17 set VS_YEAR=2022
永久生效(自动加载)
- 找到你的mamba环境路径,例如
C:\Users\mluerig\mambaforge\envs\my-env - 进入
etc\conda\activate.d目录,若不存在则手动创建 - 创建
vs2022_config.bat文件,写入以下内容:set VS_VERSION=17.0 set VS_MAJOR=17 set VS_YEAR=2022 - 下次激活环境时,这些变量会自动加载
验证配置
激活环境后执行echo %VS_YEAR%,输出2022即为配置成功
原理说明
conda-forge提供的cuda-toolkit包在激活时会通过脚本检测VS环境,默认优先查找VS 2019(对应版本号16.0)。手动覆盖VS_VERSION、VS_MAJOR、VS_YEAR三个环境变量,可强制脚本检测VS 2022(版本号17.0),从而正确加载VS 2022的编译工具路径。
内容的提问来源于stack exchange,提问作者mluerig
相关产品推荐
相关产品推荐

