zoukankan      html  css  js  c++  java
  • 简单解决python安装中的Unable to find vcvarsall.bat问题

    使用python36安装python的murmurhash的时候遇到上述问题,原因是没有找到vcvarsall.bat。查找vcvarsall.bat的方法是定义在_msvccompiler.py文件中的(注意该文件前面是有下划线的!),比如我本地的文件路径为"C:Program FilesPython36Libdistutils\_msvccompiler.py“

    打开该文件,修改函数_find_vcvarsall。我本地安装的是vs2017,vcvarsall.bat的路径为“E: oolsvs2017VCAuxiliaryBuildvcvarsall.bat”

    _find_vcvarsall的原文如下:

    def _find_vcvarsall(plat_spec):
        try:
            key = winreg.OpenKeyEx(
                winreg.HKEY_LOCAL_MACHINE,
                r"SoftwareMicrosoftVisualStudioSxSVC7",
                access=winreg.KEY_READ | winreg.KEY_WOW64_32KEY
            )
        except OSError:
            log.debug("Visual C++ is not registered")
            return None, None
    
        with key:
            best_version = 0
            best_dir = None
            for i in count():
                try:
                    v, vc_dir, vt = winreg.EnumValue(key, i)
                except OSError:
                    break
                if v and vt == winreg.REG_SZ and os.path.isdir(vc_dir):
                    try:
                        version = int(float(v))
                    except (ValueError, TypeError):
                        continue
                    if version >= 14 and version > best_version:
                        best_version, best_dir = version, vc_dir
            if not best_version:
                log.debug("No suitable Visual C++ version found")
                return None, None
    
            vcvarsall = os.path.join(best_dir, "vcvarsall.bat")
            if not os.path.isfile(vcvarsall):
                log.debug("%s cannot be found", vcvarsall)
                return None, None
    
            vcruntime = None
            vcruntime_spec = _VCVARS_PLAT_TO_VCRUNTIME_REDIST.get(plat_spec)
            if vcruntime_spec:
                vcruntime = os.path.join(best_dir,
                    vcruntime_spec.format(best_version))
                if not os.path.isfile(vcruntime):
                    log.debug("%s cannot be found", vcruntime)
                    vcruntime = None
    
            return vcvarsall, vcruntime

    修改为:

    def _find_vcvarsall(plat_spec):
            best_dir = r'E:	oolsvs2017VCAuxiliaryBuild'
            best_version = 17
            vcruntime = None
            vcruntime_spec = _VCVARS_PLAT_TO_VCRUNTIME_REDIST.get(plat_spec)
            if vcruntime_spec:
                vcruntime = os.path.join(best_dir,
                    vcruntime_spec.format(best_version))
                if not os.path.isfile(vcruntime):
                    log.debug("%s cannot be found", vcruntime)
                    vcruntime = None
            print(vcruntime)
            return r'E:	oolsvs2017VCAuxiliaryBuildvcvarsall.bat', vcruntime

    直接运行python安装即可。安装完后将该文件还原

    如果遇到如下问题:

    • 找不到cl.exe

    解决方法:将cl.exe的路径加入到系统环境变量path即可

    • mmh3module.cpp(9): error C2371: “int32_t”: 重定义;不同的基类型

    解决办法:这个是因为int32_t的宏定义与其他地方重复,将mmh3module.cpp,murmur_hash_3.cpp,murmur_hash_3.hpp这三个文件中的int32_t全部替换为其他名称即可,比如int32_tA(或增加#ifndef判断),保存后重新安装

  • 相关阅读:
    C#和C++除了语法上的差别外,还有什么其他的区别
    各种指针的的概览及造成原因
    批量操作Tomcat Shell脚本
    pi币pinetwork安装注册教程中文详细版【实操有效】
    Oracle分析函数
    Logger.Xml
    使用Redis / Zookeeper作为分布式锁的一些注意点
    Seata Server配置文件
    .gitignore忽略target无效
    MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读
  • 原文地址:https://www.cnblogs.com/charlieroro/p/8482561.html
Copyright © 2011-2022 走看看