我无法通过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
错误:
easy_install
安装,因为有些用户建议可能会这样工作注意1:我知道在website上使用已编译的二进制文件的解决方法我正在寻找使用distutils的解决方案(如果有的话)。 注2:错误日志明显较大,我将其剪切以便于阅读。
答案 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位