问题描述昨天想跑个马里奥的强化学习 demo需要装 nes-py这个库。结果一个简单的 pip install nes-py硬是让我跟 Windows 的 C 编译环境搏斗了一晚上一上午。网上搜到的方案比较零散干脆把自己的完整解决过程记录下来希望后来者能少走点弯路。总结本人电脑环境复杂安装东西喜欢私自更改路径导致各种环境变量群魔乱舞如果你是一个直接按照默认路径安装的乖宝宝大概率是不会遇到下面的问题我是根据B站的一个up主 算法路飞 的教程来走的这个up主也专门出了一个视频来解决这类报错2.5-依赖问题_哔哩哔哩_bilibili就是用VS Studio的安装器把使用 C 的桌面开发Desktop development with C的组件给安装了就能用然而我很早之前不久已经安装了这个吗怎么会报错然后我根据网上其他教程用图中这玩意安装然后出现了下面的报错没截图见谅此时不应有 \Windows于是遂将VS Studio卸了重装原本装在D盘的现在直接安装在C盘默认路径这下应该没问题了吧然后还是有报错C:\Users\我的用户名where cl信息: 用提供的模式无法找到文件。何意味还是找不到编译器下面是完整的处理过程包括实现对nes-py库的安装和对上面报错的根治1 绕过vcvarsall.bat把库装上再说C编译组件肯定是安装了的只是环境变量无法使用。经过调查是vcvarsall.bat报错导致pip安装编译的时候找不到cl.exeC:\Users\我的用户名where cl信息: 用提供的模式无法找到文件。因此决定绕过报错的vcvarsall.bat进行安装vcvarsall.bat的本质是一个批处理脚本其核心任务是为当前命令行会话设置一系列编译所需的环境变量主要包括PATH: 添加编译器cl.exe、链接器link.exe和资源编译器rc.exe等工具所在的目录。INCLUDE: 指定C/C标准库及Windows SDK头文件的搜索路径。LIB: 指定链接时所需的库文件.lib的搜索路径。当这个脚本因为系统环境变量中残留的旧配置如包含括号()的路径而报错“此时不应有 \Windows”时我们无需修复脚本本身而是可以手动侦察工具链的实际位置并直接设置上述环境变量从而达到完全相同的效果。因此打开一个新的cmd直接手动设置PATH、INCLUDE和LIBset PATHcl.exe 所在目录;rc.exe 所在目录;%PATH% set INCLUDEMSVC的include目录;SDK的ucrt目录;SDK的um目录;SDK的shared目录;SDK的winrt目录;SDK的cppwinrt目录 set LIBMSVC的x64库目录;SDK的ucrt\x64库目录;SDK的um\x64库目录这是我的如果默认安装地址差不多路径文件夹找出来一个一个复制就行set PATHC:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64;C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem; set PATHC:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64;%PATH% set INCLUDEC:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\shared;C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um set LIBC:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\lib\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.26100.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.26100.0\um\x64剧透一下问题出在这里很可能是这里的(x86)导致vcvarsall.bat报错set PATHC:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64;%PATH%然后conda activate super_mario pip install nes-py特定的版本终于安装成功2 如何解决“此时不应有 \Windows”我自己的问题非要安装到D盘环境变量是我自己配置的后面卸载了安装到C盘原有环境变量还在因此需要删除之前手动配置在PATH、INCLUDE和LIB中多余的环境变量一开始运行 pip install nes-py就报错指向 cl.exe执行失败。我试着手动跑一下 vcvarsall.bat来初始化环境结果终端直接弹出一句\Windows 此时不应有 \Windows看了网上的各种分析应该是环境变量的问题。我检查了系统环境变量果然以前图省事在 INCLUDE和 LIB里手动添加了 VS 和 Windows SDK 的路径比如C:\Program Files(x86)\Windows Kits\10\...问题就出在这个(x86)的右括号)上。vcvarsall.bat这个脚本内部用了很多 if (...) (...)的语法当它展开环境变量时这个 )会被误认为是代码块结束的标记直接导致脚本解析崩溃。这两个指向旧版工具不需要永久留在 PATH 里vcvarsall.bat 会自动加正确版本的直接删掉ok完美总结一下这次踩坑的根本原因就是手动配置编译环境变量埋下的雷。不仅容易因为路径里的括号引发语法错误还会在软件升级后导致版本错乱。