问题
在安装 Python 的第三方库或者编译源码的时候,相信不少人遇到过unable to find vcvarsall.bat 这个错误,网上也有不少的解决办法,但是自己操作一遍之后,发现问题还是没有解决,因此特意记录下我自己解决这个问题的方法。
解决方案
其实解决方法也很简单,有两种:
VS Studio 比较庞大,是个重量级的大家伙,个人更偏向于安装 VC Build Tools,毕竟不是专门用 VS 开发的,安装之后可能需要重启一下系统。
需要注意的是,VS/VC 的版本需要跟编译 Python 所用的 VS/VC 的版本对应, 比如 Python 3.4.1 是用 MSC v.1600 编译的,那么就需要安装 Visual Studio 2010 或者 Visual C++ 2010,可以去微软网站上找得到 MSC 的版本跟 VS/VC 对应关系。这里有一份不完整的列表可以参考:
1 | MSC v.1000 -> Visual C++ 4.x |
那么怎么知道 MSC 的版本信息呢?这个也简单,进入 Python Shell 的时候会有打印信息的。比如像下面这样:

根据打印信息,就可以知道 Python 3.4.1 的 MSC 版本信息。
原因分析
那这个问题的根本原因是什么呢?根本原因应该是安装第三方库的时候,需要编译库的源码,而源码里包含有 C/C++ 的代码。编译 C/C++ 的代码,就需要到对应的编译器,然后就会查找系统安装的编译器,当找不到的时候,就会报 unable to find vcvarsall.bat 这个错误。安装 VS/VC 之后,就安装有 C/C++ 的编译器了,这个错误就不会有了。
不同版本的编译器不一定会兼容,所以就需要安装与编译 Python 时候所用的编译器版本吻合的编译器,不然要不是编译不了,要么是编译出的产物无法使用。一般情况下高版本的编译器向下兼容低版本的编译器,但是反过来就无法兼容,所以可以安装相同的或者更高的版本编译器。