You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

永久生效(自动加载)

  1. 找到你的mamba环境路径,例如C:\Users\mluerig\mambaforge\envs\my-env
  2. 进入etc\conda\activate.d目录,若不存在则手动创建
  3. 创建vs2022_config.bat文件,写入以下内容:
    set VS_VERSION=17.0
    set VS_MAJOR=17
    set VS_YEAR=2022
    
  4. 下次激活环境时,这些变量会自动加载

验证配置

激活环境后执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:13:10