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

时间:2014-04-14 16:07:00

标签: python windows numpy pip python-3.4

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

这是一个已被广泛报道的问题,我a related question无法找到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']

然后我跟着这个advice并将该文件修改为在讨论论坛中链接,导致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

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

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错误:

  • link包含对msvc9compiler.py
  • 的进一步修补程序
  • Peter Cock的这个link(这有助于Python3.4的32位安装)
  • 尝试使用easy_install安装,因为有些用户建议可能会这样工作

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

4 个答案:

答案 0 :(得分:8)

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

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

mfinfo = self.manifest_get_embed_info(target_desc, ld_args)

mfinfo = None

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

答案 1 :(得分:4)

尽管已接受的答案行之有效,但这是经过战斗测试的图书馆的不必要的猴子补丁。

要从根本上解决问题,只需在路径中添加{x3或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)中。

希望它会有所帮助,编译愉快!

答案 2 :(得分:3)

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

具体来说,在“开始”菜单中,您应该使用&#34; Visual Studio命令提示符(2010)&#34;。打开此程序(它将打开命令提示符),然后在命令提示符下键入:

pip install numpy

评论:

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

2)您可能有多个命令提示符选项。我很幸运只有裸骨版本&#34; Visual Studio命令提示符(2010)&#34;

3)要安装Python 3.4,我只需打开标准命令提示符,然后

pip install numpy

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

答案 3 :(得分:2)

如果您没有修复这些步骤的问题,请查看这个帮助我构建numpy的简单解决方案: 转到Jurko的存储库*,在其中修补/改进用于使用MSVC构建的脚本并下载/复制粘贴文件:

msvc9compiler.py
msvccompiler.py

链接:

将它们保存在文件夹&#39; \ Lib \ distutils \&#39;您的python安装目录,例如:&#34; C:\ WinPython-64bit-3.4.3.2 \ python-3.4.3.amd64 \ Lib \ distutils&#34;。

使用pip / easy_install构建python模块的问题还有其他一些解决方案,例如:error: Unable to find vcvarsall.bat ; Unable to find vcvarsall.bat using Python 3.3 in Windows 8有时似乎无法解决。

我的系统:windows 7,windows sdk 7.1,vs2010表达sp1,python 3.4.3,64位