使用cython编译py或者pyx文件时,出现
error:Unable to find vcvarsall.bat
1. 原因
原因是没有找到vcvarsall.bat指定的vc++编译器进行编译。因为在windows平台下,cython是调用vc++编译器对生成的c文件进行bi生成编译,从而生成pyd文件的。
但是,其对vc++的版本有要求的,具体使用哪个,见下面文件
C://Python37/Lib/distutils/msvccompiler.py
安装对应所需要的vc版本即可
当前主流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 | 下载 |
====
问题5:是否可以只安装VC,不安装VS呢?
可以,请点击这里查看详细说明。
问题6:是否有其他解决方案?
有的,其实我们的目就是在当前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等。这些方案个人不提倡使用,因为可能会带来一些其他不可预知的问题。
Microsoft Visual C++ Compiler for Python 2.7的下载地址在这里。
============另外一篇文章说明==============
对于很多python玩家来说,难免安装一些第三方的库,但是,在安装过程中,如果遇到了 error: Unable to find vcvarsall.bat。怎么办呢?网上答案千千万,楼主亲测,管用的貌似真的不多,我来分享一下我的攻坚之路(win10/python3.5)。说明下楼主情况:vs2013/vc下存在vcvarsall.bat。但是依旧报错,配置环境变量后依旧报错。
法1:网上所说的安装安装MinGW,然后在“..python安装路径...\Lib\distutils”下新建一个文件distutils.cfg,在这文件里面指定编译器为mingw32。很多人都在说这样解决,但是,貌似很多人都不推介,据说,搞定的概率很小,会报其他的错。
法2:下载安装可行版本的vs-(可行版本怎么看,请移步:..python安装路径...\Lib\distutils目录下有个msvc9compiler.py)
去下载安装VS2010(08版貌似也行,不过没必要用旧版,指不定哪个库又无法编译),给个地址(百度的云盘 国内应该速度可以)
http://pan.baidu.com/share/link?shareid=1609273194&uk=3255422755
然后注意这一步很重要:命令行下执行 SET VS90COMNTOOLS=%VS100COMNTOOLS%
如果你安装的是 2012 版 SET VS90COMNTOOLS=%VS110COMNTOOLS%
如果你安装的是 2013版 SET VS90COMNTOOLS=%VS120COMNTOOLS%
或者更暴力,直接配置系统环境变量 VS90COMNTOOLS指向 %VS你的版本COMNTOOLS%
你还可以更暴力,在“..python安装路径...\Lib\distutils目录下有个msvc9compiler.py找到243行
toolskey = "VS%0.f0COMNTOOLS" % version 直接改为 toolskey = "VS你的版本COMNTOOLS"
法3:在系统环境变量里配置"VS%0.f0COMNTOOLS" %="VS你的版本COMNTOOLS"。跟法2原理相同。