首先介绍一个网站,科学运算类的python库很全,而且标明了依赖关系,对安装帮助很大:http://www.lfd.uci.edu/~gohlke/pythonlibs/#iminuit。

虽然网上对numpy和scipy的安装教程有很多,所谓五花八门,但大部分都是旧版本的方式,很多方式和连接已经失效,而我恰恰用的是最新的python 3.5,所以,尽是被坑的份。

之所以要上来就介绍这个网站,因为最后发现最靠谱的方案就是用这个网站的numpy+mkl和scipy,我因为还需要处理excel表格,所以pandas也是这里下下来的。下载下来的文件是whl格式的,我是使用pip进行的安装,装好后尝试import numpy和import scipy如果不报错就说明装好了。

但是,这里还需要注意这个网站最上方的一行注意事项:

Many binaries depend on numpy-1.11+mkl and the Microsoft Visual C++ 2008 (x64, x86, and SP1 for CPython 2.6 and 2.7), Visual C++ 2010 (x64, x86, for CPython 3.3 and 3.4), or the Visual C++ 2015 (x64 and x86 for CPython 3.5) redistributable packages.

发现什么没有,都说装scipy要先装numpy,但除了这里真的没有发现其他地方提醒过还要装Visual C++的运行库,而且是这么清楚的对应版本说明。我的悲剧也就是这么发生的,装了个python 3.5,Visual的运行库只装到了2010。结果一开始根本就没有注意到,准确的说没有任何的报错提醒,直到使用了leastsq拟合,莫名的报错如下:

….
from scipy.optimize import curve_fit
File “C:\Program Files\WinPython-64bit-3.5.1.1\python-3.5.1.amd64\lib\site-packages\scipy\optimize__init__.py”, line 222, in
from .minimize import *
File “C:\Program Files\WinPython-64bit-3.5.1.1\python-3.5.1.amd64\lib\site-packages\scipy\optimize_minimize.py”, line 30, in
from .lbfgsb import minimize_lbfgsb
File “C:\Program Files\WinPython-64bit-3.5.1.1\python-3.5.1.amd64\lib\site-packages\scipy\optimize\lbfgsb.py”, line 44, in
from scipy.sparse.linalg import LinearOperator
File “C:\Program Files\WinPython-64bit-3.5.1.1\python-3.5.1.amd64\lib\site-packages\scipy\sparse__init
.py”, line 213, in
from .csr import *
File “C:\Program Files\WinPython-64bit-3.5.1.1\python-3.5.1.amd64\lib\site-packages\scipy\sparse\csr.py”, line 13, in
from ._sparsetools import csr_tocsc, csr_tobsr, csr_count_blocks, \
ImportError: DLL load failed: The specified module could not be found.

开始顺着报错往下找,没有任何头绪。后来迫不得已用英文关键词疯狂google,才找到了这个帖子:

https://github.com/winpython/winpython/issues/300

问题一样有没有,事实证明中文搜索结果平均发表时间落后英文搜索结果2年左右……帖子中回复切中要害:

For WinPython 3.5, Windows 7/8 users may have to install Microsoft Visual C++ Redistributable for Visual Studio 2015

安装后一切恢复了平静,也算是终于爬出了这个坑,前后浪费了一整个下午的时间。总结起来就两点:

1. 装最新的版本有很高的几率掉坑
2. 能用英文关键字搜索少用中文…