numpy.show_config()
并不总是提供可靠的信息。例如,如果我apt-get install python-numpy
在Ubuntu 14.04上,输出np.show_config()
如下所示:
blas_info:
libraries = ['blas']
library_dirs = ['/usr/lib']
language = f77
lapack_info:
libraries = ['lapack']
library_dirs = ['/usr/lib']
language = f77
atlas_threads_info:
NOT AVAILABLE
blas_opt_info:
libraries = ['blas']
library_dirs = ['/usr/lib']
language = f77
define_macros = [('NO_ATLAS_INFO', 1)]
atlas_blas_threads_info:
NOT AVAILABLE
openblas_info:
NOT AVAILABLE
lapack_opt_info:
libraries = ['lapack', 'blas']
library_dirs = ['/usr/lib']
language = f77
define_macros = [('NO_ATLAS_INFO', 1)]
...
看起来numpy正在使用标准CBLAS库。但是,我知道numpy使用的是OpenBLAS,它是通过libopenblas-dev
软件包安装的。
检查* nix的最明确方法是ldd
在运行时查找numpy链接所针对的共享库(我没有Mac,但我认为可以otool -L
代替ldd
)。
~$ ldd /<path_to_site-packages>/numpy/core/_dotblas.so
如果_dotblas.so
不存在,则可能意味着numpy最初编译时numpy无法检测到任何BLAS库,在这种情况下,它根本不构建任何依赖于BLAS的组件。
_dotblas.so
已被删除,但您可以multiarray.so
改为检查其依赖项:
~$ ldd /<path_to_site-packages>/numpy/core/multiarray.so
查看我通过apt-get
以下方式安装的numpy版本:
~$ ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so
linux-vdso.so.1 => (0x00007fff12db8000)
libblas.so.3 => /usr/lib/libblas.so.3 (0x00007fce7b028000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fce7ac60000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fce7a958000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fce7a738000)
/lib64/ld-linux-x86-64.so.2 (0x00007fce7ca40000)
/usr/lib/libblas.so.3
实际上是符号链接链的开始。如果使用跟随他们达到最终目标readlink -e
,我会看到他们指向我的OpenBLAS共享库:
~$ readlink -e /usr/lib/libblas.so.3
/usr/lib/openblas-base/libblas.so.3