21

由于收到与编译问题相关的各种错误,我无法在运行 Python 3.4 的计算机上通过 pip install numpy 安装 numpy(这仅适用于 64 位安装的 Python)。

这是一个已被广泛报道的问题,我有一个有关无法找到 vcvarsall.bat 的相关问题。我已经在运行 Windows 8.1、7 Enterprise 和 7 Home Editions 的三台不同的干净机器上对此进行了测试,并且它总是出现。

安装 Visual Studio 2010 Express C++ 消除了链接中的第一个错误 - 即 Unable to find 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:错误日志明显更大,为了便于阅读,我将它们剪掉了。

4

4 回答 4

9

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

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

mfinfo = self.manifest_get_embed_info(target_desc, ld_args)

mfinfo = None

从而绕过紧随其后的 if 语句。在此更改后,numpy 成功为我编译。

于 2014-04-16T04:10:58.063 回答
7

尽管公认的答案是有效的,但对于经过实战测试的库来说,这是一个不必要的猴子补丁。

要解决问题的核心:只需将(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) 执行该操作.

希望对你有帮助,编译愉快!

于 2020-05-02T17:50:20.993 回答
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”。

有几个其他解决方案与这个问题相关,用 pip/easy_install 构建 python 模块,例如:error: Unable to find vcvarsall.bat在 Windows 8 中使用 Python 3.3 无法找到有时似乎无法解决的 vcvarsall.bat。

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

于 2015-03-31T11:35:21.647 回答
2

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

具体来说,在您的开始菜单中,您应该有类似“Visual Studio 命令提示符 (2010)”的内容。打开这个程序(它将打开一个命令提示符),然后在命令提示符中输入:

pip install numpy

注释:

1) 不同版本的 Python 应使用不同版本的 Visual Studio 进行编译。我认为 Python 人员打算让您使用 2010 版本进行编译(我可能对此错了),因此尝试打开 Visual Studio 2013 提示可能不起作用。可能是最新版本的 Python 切换了编译器,但我会先尝试 2010 年的命令提示符。

2) 您可能有多个命令提示符选项。我很幸运,只是简单的版本“Visual Studio 命令提示符(2010)”

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

pip install numpy

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

于 2015-09-07T13:46:53.613 回答