Reputation: 471
I want to have a clean start so I've compiled my own copies of the latest ATLAS, Lapack, and Python 2.7.3.
I've installed numpy and it recoginizes the BLAS from ATLAS and the following works ...
python
import numpy
numpy.test()
But scipy is not so easy!
$ python
Python 2.7.3 (default, Jan 14 2013, 13:13:35)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy.linalg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg/__init__.py", line 133, in <module>
from basic import *
File "/projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg/basic.py", line 12, in <module>
from lapack import get_lapack_funcs
File "/projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg/lapack.py", line 15, in <module>
from scipy.linalg import clapack
ImportError: /projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg/clapack.so: undefined symbol:
+clapack_sgesv
$ which python
/projects/nrel/cid/ladab/pkgi/bin/python
$ ldd /projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg/clapack.so
linux-vdso.so.1 => (0x00007fff57bff000)
libgfortran.so.3 => /usr/lib64/libgfortran.so.3 (0x00007f9229192000)
libm.so.6 => /lib64/libm.so.6 (0x00007f9228ef4000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f9228cde000)
libc.so.6 => /lib64/libc.so.6 (0x00007f922894b000)
/lib64/ld-linux-x86-64.so.2 (0x000000387dc00000)
$ cat scipy-0.11.0/site.cfg
[DEFAULT]
library_dirs = /projects/nrel/cid/ladab/pkgi/lib
include_dirs = /projects/nrel/cid/ladab/pkgi/include
[blas_opt]
libraries = f77blas, cblas, atlas
[lapack_opt]
libraries = lapack, f77blas, cblas, atlas
$ env | egrep python
PYTHONPATH=/projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages
Searching for a definition of clapack_sgesv, I find none in the site-packages/scipy:
$ cd /projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg
$ for ii in *.so; do echo ========== $ii; nm $ii | egrep clapack_sgesv
> done
========== atlas_version.so
========== calc_lwork.so
========== cblas.so
========== clapack.so
U clapack_sgesv
00000000002103e0 d doc_f2py_rout_clapack_sgesv
0000000000009810 t f2py_rout_clapack_sgesv
========== fblas.so
========== flapack.so
========== _flinalg.so
It is apparently available at the LD_LIBRARY_PATH, but scipy isn't using it ...
$ echo $LD_LIBRARY_PATH
/projects/nrel/cid/ladab/pkgi/lib:/usr/lib64
$ cd /projects/nrel/cid/ladab/pkgi/lib
$ for ii in *.so; do echo ========== $ii; nm $ii | egrep clapack_sgesv; done
========== libsatlas.so
0000000000094ce0 T clapack_sgesv
========== libtatlas.so
00000000000accb0 T clapack_sgesv
Do you have any suggestions?
Upvotes: 0
Views: 3028
Reputation: 11
I got this problem after an upgrade from Ubuntu 12.04 to 12.10. The problem was that I had two versions of scipy installed in /usr/local/lib/python2.7/dist-packages. To fix the problem I did:
sudo apt-get remove python-scipy
sudo rm -fr /usr/local/lib/python2.7/dist-packages/scipy*
sudo apt-get install python-scipy
Upvotes: 0
Reputation: 471
Many thanks for the comment by Adam Cadien ... the section in http://www.scipy.org/Installing_SciPy/Linux on "Building everything from source with gfortran on Ubuntu (Nov 2010)" still works well.
Upvotes: 1