在安装一些Python模块时,大部分是cpython写的模块时会发生如下错误 error: Unable to find vcvarsall.bat。先前的一篇文章:在Windows上安装Scrapy时也讲到了这个问题。当时讲到的方案是,安装VS 2008进行解决,但是Vs 2008又太大,不想装,所以这次想到了另外的方案,同样是上次说的,当时上次很不完整。
方案一:安装Vs2008(实测)
完全的无脑流,安装完问题直接解决。
方案二:安装Vs2010(2016-1-29更新)
上次在电脑上装个Vs2010并不能像 vs2008那样直接解决问题,主要原因是Python 2.7 使用的是 VS 2008编译的,所以Python 2.7默认只能认出VS 2008。
解决办法,在命令行下执行 SET VS90COMNTOOLS=%VS100COMNTOOLS%
VS 2010 对应:SET VS90COMNTOOLS=%VS100COMNTOOLS%
VS 2012 对应:SET VS90COMNTOOLS=%VS110COMNTOOLS%
VS 2013 对应:SET VS90COMNTOOLS=%VS120COMNTOOLS%
或者通过修改Python的源代码进行修改:打开“\Lib\distutils\msvc9compiler.py”,找到 toolskey = “VS%0.f0COMNTOOLS” % version,直接修改为toolskey = “VS100COMNTOOLS”
如果是Python 3,则上面的方法是无效的,原因是Python 3使用的是VS 2010编译的,所以设置应该是这样:
VS 2010 无需设置,直接能认出
VS 2012 对应:SET VS100COMNTOOLS=%VS110COMNTOOLS%
VS 2013 对应:SET VS100COMNTOOLS=%VS120COMNTOOLS%
或修改msvc9compiler.py文件,将: vc_env=query_vcvarsall(VERSION,plat_spec) 中的VERSION设定为已安装的VS版本对应的值:
VS2008,则VERSION为9.0
VS2010,则VERSION为10.0
VS2012,则VERSION为11.0
VS2013,则VERSION为12.0
VS2014,则VERSION为13.0
注意:Python 3.5升级了distutils,默认使用_msvccompiler.py,在这个文件中可以找到:“ ifversion>=14andversion>best_version: ”这里的14说明VS版本要在14以上才可以。所以根据这句,我们要安装最新的Visual Studio2015。上面修改msvc9compiler.py的办法没有效果。
另外,微软也提供了解决方案: