• Python error: Unable to find vcvarsall.bat


    在安装一些Python模块时,大部分是cpython写的模块时会发生如下错误 error: Unable to find vcvarsall.bat。先前的一篇文章:在Windows上安装Scrapy时也讲到了这个问题。当时讲到的方案是,安装VS 2008进行解决,但是Vs 2008又太大,不想装,所以这次想到了另外的方案,同样是上次说的,当时上次很不完整。

    方案一:安装Vs2008(实测)

    完全的无脑流,安装完问题直接解决。

    方案二:安装Vs2010(2016-1-29更新)

    上次在电脑上装个Vs2010并不能像 vs2008那样直接解决问题,主要原因是Python 2.7 使用的是 VS 2008编译的,所以Python 2.7默认只能认出VS 2008。

    解决办法,在命令行下执行 SET VS90COMNTOOLS=%VS100COMNTOOLS%

    • VS 2010 对应:SET VS90COMNTOOLS=%VS100COMNTOOLS%
    • VS 2012 对应:SET VS90COMNTOOLS=%VS110COMNTOOLS%
    • VS 2013 对应:SET VS90COMNTOOLS=%VS120COMNTOOLS%

    或者通过修改Python的源代码进行修改:打开“<python安装目录>Libdistutilsmsvc9compiler.py”,找到 toolskey = “VS%0.f0COMNTOOLS” % version,直接修改为 toolskey = “VS100COMNTOOLS” 

    如果是Python 3,则上面的方法是无效的,原因是Python 3使用的是VS 2010编译的,所以设置应该是这样:

    • VS 2010 无需设置,直接能认出
    • VS 2012 对应:SET VS100COMNTOOLS=%VS110COMNTOOLS%
    • VS 2013 对应:SET VS100COMNTOOLS=%VS120COMNTOOLS%

    或修改msvc9compiler.py文件,将: vc_env = query_vcvarsall(VERSION, plat_spec)  中的VERSION设定为已安装的VS版本对应的值:

    • VS2008,则VERSION为9.0
    • VS2010,则VERSION为10.0
    • VS2012,则VERSION为11.0
    • VS2013,则VERSION为12.0
    • VS2014,则VERSION为13.0

    注意:Python 3.5升级了distutils,默认使用_msvccompiler.py,在这个文件中可以找到:“ ifversion >= 14 and version > best_version: ”这里的14说明VS版本要在14以上才可以。所以根据这句,我们要安装最新的Visual Studio2015。上面修改msvc9compiler.py的办法没有效果。

    另外,微软也提供了解决方案:

    Python Version You will need
    3.5 and later Visual C++ Build Tools 2015 or Visual Studio 2015
    3.3 and 3.4 Windows SDK for Windows 7 and .NET 4.0
    (Alternatively, Visual Studio 2010 if you have access to it)
    2.6 to 3.2 Microsoft Visual C++ Compiler for Python 2.7

    参考链接:https://blogs.msdn.microsoft.com/pythonengineering/2016/04/11/unable-to-find-vcvarsall-bat/

    解决方案三:安装MinGW(实测)

    1、下载安装MinGW,下载地址为:http://sourceforge.net/projects/mingw/files/latest/download?source=files

    2、在MinGW的安装目录下找到bin文件夹,找到mingw32-make.exe,复制一份更名为make.exe

    3、把MinGW的路径添加到环境变量path中,比如我把MinGW安装到D:MinGW中,就把D:MinGWin添加到path中;

    4、在<python安装目录>distutils增加文件distutils.cfg,在文件里输入

    [build]
    compiler=mingw32

    保存;

    5、执行原先的模块安装,发现还是报错,报错内容为:error: command ‘gcc’ failed: No such file or directory  解决方案是将D:MinGWlib再添加到PATH中。

    6、如果安装过程中出现 error: Could not find ‘openssl.exe’ 则直接到http://pypi.python.org/pypi/pyOpenSSL/0.13 下载安装即可。

    7、再次执行时安装模块时,发现如下错误:

    D:MinGWingcc.exe -mno-cygwin -mdll -O -Wall “-ID:Program FilesPython27inc
    lude” “-ID:Program FilesPython27include” “-ID:Program FilesPython27PC” -c
    ../libdasm.c -o build emp.win32-2.7Release..libdasm.o
    cc1.exe: error:unrecognized command line option ‘-mno-cygwin’
    error: command ‘gcc’ failed with exit status 1

    原因是gcc 4.6.x 以后不再接受-mno-cygwin为了解决这个问题需要修改<python安装目录>distutilscygwinccompiler.py文件。找到:

    修改为:

    至此,大功告成!

    方案四:安装编译好的wheel文件

    先安装好wheel: pip install wheel

    寻找对应的.whl文件:

    http://www.lfd.uci.edu/~gohlke/pythonlibs/

    使用 pip install filename.whl  进行安装

    参考链接:http://pythonwheels.com/

  • 相关阅读:
    LinQ Group By
    sql server 还原数据库后,删除用户,提示数据库主体在该数据库中拥有架构,无法删除解决方法
    各种网站资源
    Easyui TreeGrid数据源
    MVC中创建自定义视图的t4模板
    栈溢出练习
    Stack Canary
    攻防世界pwn之新手练习区
    开源 PetaPoco 扩展~一个小型轻巧的ORM~
    linux调度全景指南
  • 原文地址:https://www.cnblogs.com/oracleblogs/p/6164782.html
Copyright © 2020-2023  润新知