原文链接
(2019.11.22已解决)Cython出现error:Unable to find vcvarsall.bat - 灰信网(软件开发博客聚合)
-
VS与VC及内部版本的对应关系如下:
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 2014 13.0 Visual C++ 2014 Visual Studio 2015 14.0 Visual C++ 2015 Visual Studio 2015 RTM 14.0 Visual C++ 2015 -
问题解释
没有找到
vcvarsall.bat
指定的vc++
编译器进行编译。因为在windows
平台下,cython
是调用vc++
编译器对生成的c文件
进行bi生成编译,从而生成pyd
文件的。这种问题是因为
C编译器
相关的配置没有设置好。具体本机要求哪个
VC++
版本,在下述文件中查看:.../Python37/Lib/distutils/msvccompiler.py
- 1
找到如下函数:
其中提到,
2.3
版本以后,需要的VC
版本在sys.version
中,进入cmd >> python >> import sys >> sys.version
进行查看:其中
MSC.v
后面那个数字1900
就是编译当前Python
所使用的VC
的版本信息,但还不是我们要找的那个内部版本号,我们要从这个版本信息中找到主版本号majorVersion
和次版本号minorVersion
,majorVersion + minorVersion
的结果才是我们要找那个内部版本号。那么这里的majorVersion
和minorVersion
怎么获取到呢?我们可以从上面的get_build_version()
函数中找到答案:majorVersion = int(s[:-2]) - 6 minorVersion = int(s[2:3]) / 10.0 # s就是上面的1900 majorVersion = 19 - 6 = 13 minorVersion = 00 / 10.0 = 0
所以,内部版本号就是
majorVersion + minorVersion = 13 + 0.0 = 13.0
,根据上述对照表,对应
VS2014
和VC2014
。查看程序中,确实没有
2014
:但,问题是,我找不到
VS2014
,通过这里介绍,Python3.6
对应VS2015
。Python Microsoft Visual Studio CPthon Python 2.7 Microsoft Visual Studio 2008 [MSC v.1500 64 bit (AMD64)] Python 3.4 Microsoft Visual Studio 2010 [MSC v.1600 64 bit (AMD64)] Python 3.5 Microsoft Visual Studio 2015 [MSC v.1900 64 bit (AMD64)] Python 3.6 Microsoft Visual Studio 2015 [MSC v.1900 64 bit (AMD64)] Python 3.7 Microsoft Visual Studio 2015 [MSC v.1912 64 bit (AMD64)] 先偷个懒,下载小一点的Visual C++ Redistributable for Visual Studio 2015,安装显示已经有了,安装失败。
因此下载安装
Microsoft Visual Studio 2015
。 -
需要自定义安装,详情请见
-
【记录】Cython出现error:Unable to find vcvarsall.bat(2)_TaiBai_435_的博客-CSDN博客