在安装Python第三方包的时候,不管是编译源码安装,还是使用pip install
还是easy_install
都经常会遇到如下的困扰:(之前一篇日志介绍安装numpy
的时候,也遇到了,那里是一种解决方法).
Unable to find vcvarsall.bat
这个原因是大概要安装的第三方包需要依赖gcc或者vc编译器。解决方法目前试过两种,都可以解决。
如下两种解决方法,一一介绍:
如果电脑上安装了VS2008以及以上版本(网上说只能VS2008是错误的说法),就可以直接按照之前的安装numpy的博客来解决。
1. Python 目录下,打开 Lib–>distutils\msvc9compiler.py
2. 找到这一行
vc_env = query_vcvarsall(VERSION, plat_spec)
3. 根据自己VS版本,如果是VS2012
那就把 函数的第一个参数VERSION
改成 11.0
, 如果是VS2013
就是12.0
.
4. 之后找到这一行
mfinfo = self.manifest_get_embed_info(target_desc, ld_args)
改成:
mfinfo = None
5. 保存退出即可
在执行pip
或者easy_install
即可。
如果不想安装庞大的VS,那就可以使用GCC编译器啦, 这里就是用如下:
MinGW
安装方法可以直接去MinGW 官网下载,如果嫌麻烦的话,就直接下载个IDE吧codeblocks 吧 选择带MinGW
的那个版本,大概100M左右。 这个自带了MinGW.
好啦,安装完成之后,记得把MinGW加入环境变量:如以下是我的目录
E:\program files\CodeBlocks\MinGW\bin
加入到path
变量即可
之后再试试 源码安装或者pip 或者 easy_install
,如果能正常安装就ok啦。 如果仍然报错—极有可能是下面的问题
cc1.exe: error: unrecognized command line option '-mno-cygwin'
error: command 'gcc' failed with exit status 1
这样的话,原因是:
这是因为mingw安装的gcc版本是4.xx了,-mno-cygwin选项只在3.xx版本有,如果换回去3.xx版本可能可以编译过去。
如果不换则尝试对\Lib\distutils\cygwinccompiler.py进行修改,把里面的-mno-cygwin都去掉
好啦;就跟上面一样修改配置文件了
Python 目录下,打开 Lib-->distutils\cygwinccompiler.py
找到这几句:
if self.gcc_version < '4' or is_cygwingcc():
no_cygwin = ' -mno-cygwin'
else:
no_cygwin = ''
直接都注释掉,加上一句如下:
# if self.gcc_version < '4' or is_cygwingcc():
# no_cygwin = ' -mno-cygwin'
# else:
# no_cygwin = ''
no_cygwin = ''
之后再试试pip
或者 easy_install
或者编译源码包去安装吧~