Python: Unable to find vcvarsall.bat 解决方法

原因

在安装Python第三方包的时候,不管是编译源码安装,还是使用pip install 还是easy_install 都经常会遇到如下的困扰:(之前一篇日志介绍安装numpy的时候,也遇到了,那里是一种解决方法).

  Unable to find vcvarsall.bat

这个原因是大概要安装的第三方包需要依赖gcc或者vc编译器。解决方法目前试过两种,都可以解决。

解决方法

如下两种解决方法,一一介绍:

1.使用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 即可。

2.使用MinGW

如果不想安装庞大的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 或者编译源码包去安装吧~

你可能感兴趣的:(python)