由于各种错误,我无法在运行Python 3.4的计算机上通过pip install numpy来安装numpy,这是我收到的与编译问题相关的错误(仅在64位安装的Python上如此)。
这是一个已广泛报道的问题,我有一个有关找不到vcvarsall.bat的问题。我已经在运行Windows 8.1、7 Enterprise和7 Home Edition的三台不同的清洁机上对此进行了测试,并且它总是会出现。
安装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
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错误:
Broken toolchain
easy_install
注意1:我知道使用此网站上已编译的二进制文件的解决方法,我特别在寻找使用distutils的解决方案。注意2:错误日志显然更大,为了便于阅读,我将其剪切。
我能够在Windows 7 Professional(64位)中重现所有这些错误。
您的最终问题(破碎的工具链)是由更多与清单相关的问题引起的。我可以通过更改以下行(在msvc9compiler.py中)来解决此问题:
mfinfo = self.manifest_get_embed_info(target_desc, ld_args)
至
mfinfo = None
因此绕过了紧随其后的if语句。更改之后,numpy为我成功编译了。