在Windows 8.1,7企业版和7家庭版下的numpy安装期间编译pip的问题

Mat*_*att 20 python windows numpy pip python-3.4

我无法通过pip install numpy在运行Python 3.4的计算机上安装numpy,因为我收到的各种错误都与编译问题有关(这只是64位Python安装的情况).

这是一个已被广泛报道的问题,我有一个关于无法找到vcvarsall.bat 的相关问题.我已经在运行Windows 8.1,7企业版和7家庭版的三台不同的清洁机器上进行了测试,它总是出现.

安装Visual Studio 2010 Express C++摆脱了链接中的第一个错误 - 即无法找到vcvarsall.bat但抛出以ValueError结尾的下一个异常,如下所示:

  File "C:\Python34\lib\distutils\msvc9compiler.py", line 371, in initialize

    vc_env = query_vcvarsall(VERSION, plat_spec)

  File "C:\Python34\lib\distutils\msvc9compiler.py", line 287, in query_vcvarsall

    raise ValueError(str(list(result.keys())))

ValueError: ['path']
Run Code Online (Sandbox Code Playgroud)

然后我按照这个建议修改了在讨论论坛中链接的文件,导致了KEY_BASE错误.

  File "C:\Users\Matej\AppData\Local\Temp\pip_build_Matej\numpy\numpy\distutils\command\config.py", line 18, in <module>

    from numpy.distutils.mingw32ccompiler import generate_manifest

  File "C:\Users\Matej\AppData\Local\Temp\pip_build_Matej\numpy\numpy\distutils\mingw32ccompiler.py", line 36, in <module>

    from distutils.msvccompiler import get_build_version as get_build_msvc_version

  File "C:\Python34\lib\distutils\msvccompiler.py", line 638, in <module>

    from distutils.msvc9compiler import MSVCCompiler

  File "C:\Python34\lib\distutils\msvc9compiler.py", line 71, in <module>

    r"v%sA"

  File "C:\Python34\lib\distutils\msvc9compiler.py", line 67, in <listcomp>

    WINSDK_PATH_KEYS = [KEY_BASE + "Microsoft SDKs\\Windows\\" + rest for rest in (

NameError: name 'KEY_BASE' is not defined
Run Code Online (Sandbox Code Playgroud)

按照相同链接中的建议,我KEY_BASE在msvc9compiler.py中调用变量之前添加了以下定义:

KEY_BASE = r"Software\Microsoft\\"
Run Code Online (Sandbox Code Playgroud)

这导致最终错误我无法排除故障:

  File "C:\Users\Matej\AppData\Local\Temp\pip_build_Matej\numpy\numpy\distutils\command\build_src.py", line 164, in build_sources

    self.build_library_sources(*libname_info)

  File "C:\Users\Matej\AppData\Local\Temp\pip_build_Matej\numpy\numpy\distutils\command\build_src.py", line 299, in build_library_sources

    sources = self.generate_sources(sources, (lib_name, build_info))

  File "C:\Users\Matej\AppData\Local\Temp\pip_build_Matej\numpy\numpy\distutils\command\build_src.py", line 386, in generate_sources

    source = func(extension, build_dir)

  File "numpy\core\setup.py", line 682, in get_mathlib_info

    raise RuntimeError("Broken toolchain: cannot link a simple C program")

RuntimeError: Broken toolchain: cannot link a simple C program
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但没有解决Broken toolchain错误:

  • 链接包含msvc9compiler.py的进一步补丁
  • 这个链接由Peter Cock提供(这有助于Python3.4的32位安装)
  • 尝试安装使用,easy_install因为一些用户建议它可能会这样工作

注1:我知道在本网站上使用已编译的二进制文件的解决方法我特意寻找使用distutils的解决方案(如果有的话).注2:错误日志明显较大,我将其剪切以便于阅读.

小智 9

我能够在Windows 7 Professional(64位)中重现所有这些错误.

您的最后一期(破碎的工具链)是由更明显的相关问题引起的.通过更改以下行(在msvc9compiler.py中)我能够解决这个问题:

mfinfo = self.manifest_get_embed_info(target_desc, ld_args)
Run Code Online (Sandbox Code Playgroud)

mfinfo = None
Run Code Online (Sandbox Code Playgroud)

因此绕过紧随其后的if语句.经过这次改变后,numpy成功为我编译.


chj*_*und 6

尽管接受的答案是有效的,但对于经过实战考验的库来说,这是一个不必要的猴子补丁。

要解决问题的核心:只需添加(x86 或 x64 - 取决于您的目标)Microsoft Manifest Tool (mt.exe) 添加到您的路径并通过 pip 安装 numpy。

自 Visual Studio 2017 起,mt.exe 已移至 Windows SDK 7.1/8.1/10,需要安装。

我的 mt.exe (x86) 位于:C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86所以这就是我添加到路径中的内容,通过控制面板 > 系统 > 高级系统设置 > 环境变量或使用控制台中的 pathman 命令 (cmd.exe) 来执行此操作.

希望能帮到你,编译愉快!