本文主要是介绍(2019.11.22已解决)Cython出现error:Unable to find vcvarsall.bat,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
Cython
通过
Cython
将Python
代码转为C代码
以及发布Python模块
出过程中出错。即通过
Cython
编译py
或pyx
文件: -
背景名词解释
- Microsoft Visual C++ : 简称Visual C++、MSVC、VC++或VC,它是微软公司开发的Windows平台下的C++开发工具,具有集成开发环境,可以用来编辑和编译C、C++以及C++/CLI等编程语言。
- Microsoft Visual Studio : 简称VS,它是美国微软公司的开发工具包系列产品,它是一个基本完整的开发工具集,包含了整个软件生命周期中所需要的大部分工具,如UML工具,代码管控工具,也包括上面这个集成开发环境Microsoft Visual C++。
- 内部版本号: 由上可见VS是包含VC的,另外它们之间版本是有对应关系的,这个对应关系是由微软的内部版本来控制的,上面的报错信息 “Microsoft Visual C++ 9.0” 中的 9.0就是Microsoft Visual C++的一个内部版本。我们可以根据这个内部版本找到对应的VC版本是什么,以及对应的VS版本是什么。
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
找到如下函数:
其中提到,
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
,问题解决。 -
References
- Windows下安装Python扩展模块提示“Unable to find vcvarsall.bat”的问题
- CPython 各版本与 Microsoft 微软 Visual Studio 版本之间对应关系
这篇关于(2019.11.22已解决)Cython出现error:Unable to find vcvarsall.bat的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!