Python报错:Visual C++ is required和ImportError: DLL load failed

前言:

最近在 Github 里面找 demo 学习各路大神如何用 Python 破解验证码。在安装 numpy 和 scipy 的过程中遇到一些问题,在此记录一下,希望对遇到同样问题的同学有所帮助。

主要的问题有:
1、安装 numpy 的时候遇到 “unable to find vcvarsall.bat” 和 “Setup script exited with error: Microsoft Visual C++ 9.0 is required”
2、安装 scipy 时遇到 “error: no lapack/blas resources found”
3、导入 scipy.spatial.distance 时遇到 “ImportError: DLL load failed”


解决方案:

问题1:

原因:numpy 模块需要用到C++编译器。
(注释:64位系统最好不要直接用 easy_install 或者 pip install 安装模块,默认下载使用的是官方提供的模块,那是面向32位系统的详见此 )

方案一:
python是根据检查环境变量去寻找编译器路径的(Visual C++ 9.0对应VS90COMNTOOLS,Visual C++ 10.0对应VS100COMNTOOLS)。如果我们的电脑里面已经有Visual Studio了,那么就应该有C编译器的,查看系统环境变量即可看到。我们只需要新建一个环境变量指定到该环境变量的路径上即可。例如我已经有VS2012了,系统的环境变量中已经有VS110COMNTOOLS这个变量了,此时报错是需要Visual C++ 9.0 则增加一个环境变量:
变量名:VS90COMNTOOLS
变量值:%VS100COMNTOOLS%

注:
VS2003 —————— VS80COMNTOOLS
VS2008 —————— VS90COMNTOOLS
VS2010 —————— VS100COMNTOOLS
VS2012 —————— VS110COMNTOOLS
VS2013 —————— VS120COMNTOOLS
VS2015 —————— VS130COMNTOOLS


方案二:
微软为 python 提供了C编译器了:VCForPython。
可自行百度下载,python2.7的可见:VCForPython27.msi。
(注释:64位系统最好使用方案一或方案三)

方案三:
既然说了需要Visual C++,那就去百度下载吧,Visual C++ 9.0对应于Microsoft Visual C++ 2008 Express Edition(32位传送门、64位传送门)(或者下载vs2008也行)。
安装完以后可能还会遇到ValueError:
安装 Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1.exe(传送门) 即可。
然后复制 /VC/bin/vcvars64.bat/VC/bin/vcvarsamd64.bat/VC/bin/amd64/vcvarsamd64.bat (复制粘贴再改个名字)。


问题2:

安装 scipy 时遇到 “error: no lapack/blas resources found”,一般是因为使用了 “easy_install scipy” 或者 “pip install scipy” 直接下载,注意官方提供的模块时面向32位系统的。(如果32位系统的用户也遇到了这个问题,那我就不清楚了)
我的解决方案是下载64位的scipy到本地(详见此),再用 pip install G:/For_Life/360download/numpy-1.11.0b3+mkl-cp27-cp27m-win_amd64.whl 进行安装。


问题3:

在导入的时候遇到 “ImportError: DLL load failed” 这个问题,一般是因为64位系统使用了32位的模块(包括该模块和依赖模块)。别担心,只是部分32位模块在64位系统中无法使用,此时只能下载64位的模块安装包再安装了。
例如我是在 “import scipy.spatial.distance” 时报的这个错误,问题出在依赖包 numpy 模块上,我重新下载安装一个64位的numpy模块(详见此),问题就解决了。


总结:

Python官方提供的模块竟然是面向32位系统的,为此也是折腾了好些时间,以后在安装模块的时候想必也会留个心眼,长个教训。
64位系统的模块见此: 64位库

在此记录一下我自己遇到的问题,希望对同样遇到这些坑的朋友有所帮助。



转载请注明出处,谢谢!(原文链接:http://blog.csdn.net/Bone_ACE/article/details/50668837)

你可能感兴趣的:(python,error,64位,scipy,numpy)