在Windows 8.1、7企业版和7家庭版下安装numpy时,pip的编译器问题。

问题描述 投票:20回答:4

我无法在运行 Python 3.4 的计算机上通过 pip install numpy 安装 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']

然后我按照以下步骤操作 忠告 并对论坛上链接的文件进行了修补,结果出现了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

根据同一链接中的建议,我添加了以下的定义。KEY_BASE 变量在msvc9compiler.py中被调用之前。

KEY_BASE = r"Software\Microsoft\\"

这导致了我无法解决的最后一个错误。

  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

我尝试了下面的方法,但都没有解决这个问题 Broken toolchain 错误。

  • 这个 联系 其中包括对msvc9compiler.py的进一步补丁。
  • 这个 联系 作者:Peter Cock (这对 Python3.4 的 32 位安装有帮助)
  • 尝试使用 easy_install 正如一些用户所建议的那样,它可能会这样做

注1:我知道使用编译后的二进制文件来解决这个问题。网站 如果有的话,我正在特别寻找使用distutils的解决方案.注2:错误日志明显较大,为了便于阅读,我把它们剪掉了。

python windows numpy pip python-3.4
4个回答
9
投票

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

您的最后一个问题(破碎的工具链)是由更多的清单相关问题引起的。 我能够通过修改以下一行(在msvc9compiler.py中)来解决这个问题。

mfinfo = self.manifest_get_embed_info(target_desc, ld_args)

改为

mfinfo = None

从而绕过紧接着的if语句。 在做了这个改动之后,numpy 成功地编译了。


3
投票

我认为最简单的解决办法是打开 Visual Studio 命令提示符 (你应该不需要任何其他的修复,只需要 Python 2 或 3 的最新版本)。

具体来说,在你的 "开始 "菜单中,你应该有类似 "Visual Studio Command Prompt (2010) "的东西。打开这个程序(它会打开一个命令提示符),然后在命令提示符中,键入:"Visual Studio Command Prompt (2010)"。

pip install numpy

注释。

1)不同版本的Python是要和不同版本的Visual Studio一起编译的。我认为Python的人打算让你用2010年的版本编译(这一点我可能错了),所以试图打开Visual Studio 2013的提示符可能无法工作。可能是最新版本的Python切换了编译器,但我会先尝试2010年的命令提示符。

2)你可能有多个命令提示符选项。我的运气很好,只用了 "Visual Studio Command Prompt (2010) "这个赤裸裸的版本。

3) 要安装Python 3.4,我可以简单地打开一个标准的命令提示符,然后再加上

pip install numpy

但对于 Python 2.7,我不得不使用这个命令提示符技巧。


3
投票

虽然公认的答案是有效的,但这是对一个经过实战检验的库进行不必要的猴子补丁。

为了从根本上解决这个问题。简单地添加 (x86 或 x64 - 取决于你的目标) 微软清单工具 (mt.exe)到你的路径,并通过pip安装numpy。

从Visual Studio 2017开始,mt.exe已经移到Windows SDK 7.18.110中,需要安装。

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

希望能帮到你,祝你编译成功


2
投票

如果你没有解决这些步骤的问题,请检查这个简单的解决方案,帮助我建立numpy:去Jurko的资源库*,他在其中打补丁,改善与MSVC的脚本,并下载复制粘贴的文件。

msvc9compiler.py
msvccompiler.py

链接:

将它们保存在你的python安装目录下的"\Lib\distutils/"文件夹中,例如:"C:\WinPython-64bit-3.4.3.2\python-3.4.3.amd64\Lib\distutils"。"C:\WinPython-64bit-3.4.3.2\python-3.4.3.amd64/Lib/distutils"。

还有一些其他的解决方法与此问题相关,如用 pipeasy_install 来构建 python 模块,例如:"C:\WinPython-64bit-3.4.3.2python-3.4.3.amd64Lib/distutils"。错误:无法找到vcvars 无法找到vcvarsall.bat。 ; 在Windows 8中使用Python 3.3无法找到vcvarsall.bat。 有时似乎无法解决的问题,我的系统:windows 7, windows sdk 7.1, vs2010 express with sp1, python 3.4.3, 64位。

我的系统:windows 7,windows sdk 7.1,vs2010 express with sp1,python 3.4.3,64位。

© www.soinside.com 2019 - 2024. All rights reserved.