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

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

这是一个广泛报道的问题,我有一个关于无法findvcvarsall.bat 的相关问题 。 我已经在运行Windows 8.1,7 Enterprise和7 Home Edition的三台不同的干净机器上testing过了,它总是出现。

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

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'] 

然后我按照这个build议修改了文件,并在讨论论坛中链接,导致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 

在相同链接的build议之后,我在msvc9compiler.py中调用variables之前添加了以下的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错误:

  • 这个链接包含msvc9compiler.py的补丁
  • Peter Cock的这个链接 (这对Python3.4的32位安装有帮助)
  • 尝试使用easy_install安装,因为一些用户build议它可能以这种方式工作

注1:我知道使用本网站上编译的二进制文件的解决方法我特别寻找使用distutils的解决scheme,如果有的话。 注2:错误日志显然较大,为了便于阅读,我剪切了它们。

我能够在Windows 7专业版(64位)重现所有这些错误。

你最后的问题(损坏的工具链)是由更多的清单相关的问题引起的。 我能够通过更改以下行(在msvc9compiler.py中)来解决此问题:

 mfinfo = self.manifest_get_embed_info(target_desc, ld_args) 

 mfinfo = None 

从而绕过了紧随其后的if语句。 在这个改变之后,numpy成功为我编译。

如果你没有解决这些步骤的问题,请检查这个简单的解决方案,帮助我建立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表示与SP1,Python 3.4.3,64位

我认为最简单的解决方案将是打开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,我不得不使用这个命令提示技巧。