完美解决 Unable to find vcvarsall.bat 问题。
以 python2.7为例子。
下载 VS2010.然后安装。或者 大于 VS2008 的其他版本。具体情况,试所需编译的 py版本。比如 py2.3的用的是 vc6++。
VS2010安装好以后,网上大部分说可以设置环境变量 VS90COMNTOOLS = %VS100COMNTOOLS%,或者将VS90COMNTOOLS 设置成,VS2010安装目录下面的 VS路径,比如
D:\Program Files\Microsoft Visual Studio 10.0\VC;
在实践的过程照此实验多次,发现大部分是坑。
主要原因有两个 ,第一个 %VS100COMNTOOLS% 这个环境变量所指的方向就不对 ,其指向的地址为 D:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools。
第二个 在环境变量中设置了 VS90COMNTOOLS = “D:\Program Files\Microsoft Visual Studio 10.0\VC” 也无效。
最后还是采用暴力破解:
原理:安装程序或者用Cython来编译.py 文件的时候,会用到 ,python 库中的 D:\Python27\Lib\distutils 模块。来对.py扩展进行编译程 .dll
在此模块下 找到 msvc9compiler.py 文件 ,然后 打开该文件 搜索 “Unable to find vcvarsall.bat” ,此时会定位到两个地方。
第一个是 259 行的 log.debug("Unable to find vcvarsall.bat ") 看上面有一个 if os.path.isfile(vcvarsall): 判断是否为文件。
还有一处是 269 raise DistutilsPlatformError("Unable to find vcvarsall.bat") //此处就是你在 cmd 黑色的屏幕中看到的 那句 Unable to find vcvarsall.bat。
因此可以定位到 问题就处在这里。 看前面判断的是 if vcvarsall is None: 说明 之前那个判断 if os.path.isfile(vcvarsall) 是 false, 因此可以不用管前面 ,直接在 268 处 插入
vcvarsall = r'D:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat' //此文件的全路径 根据安装的 VS路径来确定。
至此ok,在安装或者编译 程序。就ok了。
刚开始的按照网上的 暴力破解 243 行的 toolskey ,将其设置为 D:\Program Files\Microsoft Visual Studio 10.0\VC,测试很久无效。其实主要原因还是出在 isfile的判断上面。是否是因为 路径名中 间 有空格,导致 isfile判断出错。尚未测试。