提示: 若是你只是想知道本身须要安装哪一个版本的Visual Studio请直接查看本文最后一个小节的内容。python
咱们在windows下经过pip安装一些外部Python 模块(好比,pycrypto)时一般会遇到安装失败的问题,并且会看到相似这样的错误提示:编程
error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
如图所示:
windows
或编程语言
error: Unable to find vcvarsall.bat
如图所示:
函数
网上的不少文章给出的解决方案都安装Visual Studio,可是版本是有要求的,有的说安装Visual Studio 2008,有的说要安装Visual Studio 2010。那么为何安装Visual Studio就能解决这个问题呢?到底该安装哪一个版本的VisualStudio呢?是否有其余解决方案呢? 这些问题是本文讨论的重点,但愿你们之后遇到这些问题再也不有那么多的困惑和慌乱感。工具
咱们先对上面错误信息中几个名词作个简单的介绍:visual-studio
VS名称 | 内部版本 | VC名称 |
---|---|---|
Visual Studio | 4.0 | Visual C++ 4.0 |
Visual Studio 97 | 5.0 | Visual C++ 5.0 |
Visual Studio 6.0 | 6.0 | Visual C++ 6.0 |
Visual Studio .NET 2002 | 7.0 | Visual C++ 2002 |
Visual Studio .NET 2003 | 7.1 | Visual C++ 2003 |
Visual Studio 2005 | 8.0 | Visual C++ 2005 |
Visual Studio 2008 | 9.0 | Visual C++ 2008 |
Visual Studio 2010 | 10.0 | Visual C++ 2010 |
Visual Studio 2012 | 11.0 | Visual C++ 2012 |
Visual Studio 2013 | 12.0 | Visual C++ 2013 |
Visual Studio 2015 | 14.0 | Visual C++ 2015 |
Visual Studio 2015 RTM | 14.0 | Visual C++ 2015 |
了解了上面这些名词以及它们之间关系的以后,咱们来分析一下本文第一部分中的错误信息:开发工具
咱们内心可能有一些疑惑,看看下面有没有你要找的答案:ui
由于有些与操做系统底层密切相关的Python扩展,因为使用C/C++ 进行代码编写,所以在进行安装时须要进行C/C++ 代码的编译工做,而Windows平台的专用C/C++ 代码编译工具就是Microsoft Visual C++ ,所以Python的模块管理工具(如,pip)默认设置的用来编译C/C++ 代码的工具就是VC。Linux平台上所使用的C/C++ 代码编译工具一般都是gcc,所以不涉及安装VS的问题。this
上面已经说明过了,由于Visual Studio中包含Visual C++,安装了Visual Studio以后也就安装了Visual C++。
由于咱们当前大部分使用的是CPython,也就是C语言实现的Python版本,咱们在Windows上安装的Python也是通过VC编译过的可执行程序。为了保证扩展模块的兼容性,使用Python的模块管理工具(如,pip)安装C语言实现的外部扩展模块时会默认查找并使用与编译当前Python时所使用的相同内部版本或相互兼容的内部版本的的VC,而VS的内部版本与其所包含的VC的内部版本是一致的,所以安装的VS版本太高或太低均可能会出现问题。
其实这个问题的本质就是肯定须要安装的VS或VC的内部版本。
本文开始列出的报错信息中,有一个是明确给出了所须要的VC的内部版本的,好比
error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
说明须要安装的VC内部版本号是 9.0,从上面的版本对应表中能够找到,咱们须要安装的VS版本是 Visual Studio 2008。
可是对于那些没有明确提示所须要的内部版本号的状况,咱们怎么肯定须要安装哪一个版本的VC/VS呢?好比
error: Unable to find vcvarsall.bat
我当前的操做系统是Win 10,我安装Python的目录是C://Python27,在Python的安装目录下能够找到这样一个Python文件:C://Python27/Lib/distutils/msvccompiler.py
,从文件名就能看出来这个Python文件就是用来处理与VC编译器有关的操做的。在该Python文件中能够找到这样一个函数:
def get_build_version(): """Return the version of MSVC that was used to build Python. For Python 2.3 and up, the version number is included in sys.version. For earlier versions, assume the compiler is MSVC 6. """ prefix = "MSC v." i = string.find(sys.version, prefix) if i == -1: return 6 i = i + len(prefix) s, rest = sys.version[i:].split(" ", 1) majorVersion = int(s[:-2]) - 6 minorVersion = int(s[2:3]) / 10.0 # I don't think paths are affected by minor version in version 6 if majorVersion == 6: minorVersion = 0 if majorVersion >= 6: return majorVersion + minorVersion # else we don't know what version of the compiler this is return None
经过注释咱们能够知道,这个函数就是用来肯定编译当前Python所使用的VC编译器的版本号的,并且注释中告知从Python 2.3版本开始,VC的版本信息已经包含在sys.version中了,对于Python 2.3以前的版本就认为VC版本号是6。 以下图所示:
“MSC V.”后面那个数字1500就是编译当前Python所使用的VC的版本信息,但还不是咱们要找的那个内部版本号,咱们要从这个版本信息中找到主版本号majorVersion和次版本号minorVersion,majorVersion + minorVersion
的结果才是咱们要找那个内部版本号。那么这里的majorVersion和minorVersion怎么获取到呢?咱们能够从上面的get_build_version()函数中找到答案:
majorVersion = int(s[:-2]) - 6 minorVersion = int(s[2:3]) / 10.0
上面代码中的s就是'MSC v.'后面那个数字1500,可见:
若是你没看明白,能够直接看本文最后的总结,会列出不一样版本的Python对应的内部版本号以及它们与VC和VS的对应关系。
能够,请点击这里查看详细说明。
有的,其实咱们的目就是在当前Windows系统上安装一个与编译当前Python时所使用的VC版本一致的编译器,而微软专门为Python提供了相应的编译器:Microsoft Visual C++ Compiler for Python 2.7,咱们直接安装这个软件程序就能够了。遗憾的是,目前尚未找到Microsoft Visual C++ Compiler for Python 3.x,因此对于Python 3.x,咱们仍是须要安装Visual Studio 或 Visual C++。或者,抛弃Windows平台吧!
固然网上还有一些其余的解决方案,好比修改上面提到的get_build_version()函数,在函数的开始部分给version变量从新赋值来兼容Visual Studio的高版本;再好比,经过安装MinGW并修改Python扩展包管理程序的配置文件,将编译器改成mingw等。这些方案我的不提倡使用,由于可能会带来一些其余不可预知的问题。
当前主流Python版本与VC和VS的版本对应关系及各版本VS下载地址:
CPython | Visual C++ | Visual Studio | Visual Studio下载地址 |
---|---|---|---|
2.6, 2.7, 3.0, 3.1, 3.2 | 9.0 | Visual Studio 2008 | x86下载 x64下载 |
3.3, 3.4 | 10.0 | Visual Studio 2010 | x86下载 x64下载 |
3.5 | 14.0 | Visual Studio 2015 | 下载 |
Microsoft Visual C++ Compiler for Python 2.7的下载地址在这里。
问题交流群:666948590