[解决] Windows下安装Python Extension Package出现 error: Unable to find vcvarsall.bat 错误

最简单的方式

直接下载编译好的.exe文件进行安装

Unofficial Windows Binaries for Python Extension Packages

常用的包应该都能找到.

error: Unable to find vcvarsall.bat

使用pip安装Motor时, 总出现问题, 如下:

building 'greenlet' extension

error: Unable to find vcvarsall.bat

根据error: Unable to find vcvarsall.bat中的安装MinGW方法

1、我使用的是Python 2.7

2、安装MinGWC:\MinGW

3、添加C:\MinGW\binC:\MinGW\lib目录到环境变量PATH

4、编辑或添加C:\Python27\Lib\distutils\distutils.cfg文件, 添加如下两行:

[build]
compiler=mingw32

我使用了virtualenv, 因此这里需要在相应目录下添加

5、重新执行pip install motor, 报新的错误

building 'greenlet' extension

C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python27\include -ID:\LinksBox-Tornado\PC -c greenlet.c -o build\temp.win-amd64-2.7\Release\greenlet.o

cc1.exe: error: unrecognized command line option '-mno-cygwin'

error: command 'gcc' failed with exit status 1

参考Python error: Unable to find vcvarsall.bat

原因是gcc 4.6.x以后不再接受-mno-cygwin, 为了解决这个问题需要修改C:\Python27\Lib\distutils\cygwinccompiler.py文件。找到(搜索-mno-cygwin):

set_executables(compiler='gcc -mno-cygwin -O -Wall',
                             compiler_so='gcc -mno-cygwin -mdll -O -Wall',
                             compiler_cxx='g++ -mno-cygwin -O -Wall',
                             linker_exe='gcc -mno-cygwin',
                             linker_so='%s -mno-cygwin %s %s'
                                        % (self.linker_dll, shared_option,
                                           entry_point))

修改为:

set_executables(compiler='gcc -O -Wall',
                             compiler_so='gcc -mdll -O -Wall',
                             compiler_cxx='g++ -mno-cygwin -O -Wall',
                             linker_exe='gcc',
                             linker_so='%s -mno-cygwin %s %s'
                                        % (self.linker_dll, shared_option,
                                           entry_point))

接着还是出现问题了...

所以, 真正的解决方法是...

pypi greenlet上去下载greenlet-0.4.1.win-amd64-py2.7.exe直接安装

然后将C:\Python27\Lib\site-packages目录下的greenlet.pydgreenlet-0.4.1-py2.7.egg-info两个文件拷贝到我的virtualenv目录的X:\virtualenvDir\Lib\site-packages下才解决了问题