我无法在运行 Python 3.4 的计算机上通过 pip install numpy 安装 numpy,因为我收到了各种与编译问题相关的错误 (这只是在 64 位安装的 Python 上的情况)。
这是一个已经被广泛报道的问题,我曾有过这样的经历 相关问题 关于找不到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']
然后我按照以下步骤操作 忠告 并对论坛上链接的文件进行了修补,结果出现了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
错误。
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 成功地编译了。
我认为最简单的解决办法是打开 Visual Studio 命令提示符 (你应该不需要任何其他的修复,只需要 Python 2 或 3 的最新版本)。
具体来说,在你的 "开始 "菜单中,你应该有类似 "Visual Studio Command Prompt (2010) "的东西。打开这个程序(它会打开一个命令提示符),然后在命令提示符中,键入:"Visual Studio Command Prompt (2010)"。
pip install numpy
注释。
1)不同版本的Python是要和不同版本的Visual Studio一起编译的。我认为Python的人打算让你用2010年的版本编译(这一点我可能错了),所以试图打开Visual Studio 2013的提示符可能无法工作。可能是最新版本的Python切换了编译器,但我会先尝试2010年的命令提示符。
2)你可能有多个命令提示符选项。我的运气很好,只用了 "Visual Studio Command Prompt (2010) "这个赤裸裸的版本。
3) 要安装Python 3.4,我可以简单地打开一个标准的命令提示符,然后再加上
pip install numpy
但对于 Python 2.7,我不得不使用这个命令提示符技巧。
虽然公认的答案是有效的,但这是对一个经过实战检验的库进行不必要的猴子补丁。
为了从根本上解决这个问题。简单地添加 (x86 或 x64 - 取决于你的目标) 微软清单工具 (mt.exe)到你的路径,并通过pip安装numpy。
从Visual Studio 2017开始,mt.exe已经移到Windows SDK 7.18.110中,需要安装。
我的mt.exe(x86)位于。C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86
所以这就是我添加到路径中的内容,通过控制面板>系统>高级系统设置>环境变量或使用控制台中的pathman命令(cmd.exe)来做醚。
希望能帮到你,祝你编译成功
如果你没有解决这些步骤的问题,请检查这个简单的解决方案,帮助我建立numpy:去Jurko的资源库*,他在其中打补丁,改善与MSVC的脚本,并下载复制粘贴的文件。
msvc9compiler.py
msvccompiler.py
链接:
将它们保存在你的python安装目录下的"\Lib\distutils/"文件夹中,例如:"C:\WinPython-64bit-3.4.3.2\python-3.4.3.amd64\Lib\distutils"。"C:\WinPython-64bit-3.4.3.2\python-3.4.3.amd64/Lib/distutils"。
还有一些其他的解决方法与此问题相关,如用 pipeasy_install 来构建 python 模块,例如:"C:\WinPython-64bit-3.4.3.2python-3.4.3.amd64Lib/distutils"。错误:无法找到vcvars 无法找到vcvarsall.bat。 ; 在Windows 8中使用Python 3.3无法找到vcvarsall.bat。 有时似乎无法解决的问题,我的系统:windows 7, windows sdk 7.1, vs2010 express with sp1, python 3.4.3, 64位。
我的系统:windows 7,windows sdk 7.1,vs2010 express with sp1,python 3.4.3,64位。