Building and installing SciPy +++++++++++++++++++++++++++++ See http://www.scipy.org/scipy/scipy/wiki/GetCode for updates of this document. .. Contents:: PREREQUISITES ============= SciPy requires the following software installed: 1) Python__ 2.4.x or newer Debian packages: python python-dev Make sure that the Python package distutils is installed before continuing. For example, in Debian GNU/Linux, distutils is included in the python-dev package. Python must also be compiled with the zlib module enabled. __ http://www.python.org 2) NumPy__ 1.2.0 or newer Debian package: python-numpy __ http://www.numpy.org/ 3) Complete LAPACK__ library (see NOTES 1, 2, 3) Debian/Ubuntu packages (g77): atlas3-base atlas3-base-dev Various SciPy packages do linear algebra computations using the LAPACK routines. SciPy's setup.py scripts can use number of different LAPACK library setups, including optimized LAPACK libraries such as ATLAS__ or the Accelerate/vecLib framework on OS X. The notes below give more information on how to prepare the build environment so that SciPy's setup.py scripts can use whatever LAPACK library setup one has. __ http://www.netlib.org/lapack/ __ http://math-atlas.sourceforge.net/ OPTIONAL PACKAGES ================= The following software is optional, but SciPy can use these if present for extra functionality: 1) C, C++, Fortran 77 compilers (see COMPILER NOTES) To build SciPy or any other extension modules for Python, you'll need a C compiler. Scipy also requires a C++ compiler. Various SciPy modules use Fortran 77 libraries, so you'll need also at least a Fortran 77 compiler installed. gcc__ 3.x compilers are recommended. gcc 2.95 and 4.0.x also work on some platforms, but may be more problematic (see COMPILER NOTES). Debian packages: gcc g++ g77 __ http://gcc.gnu.org/ 2) FFTW__ x (see Lib/fftpack/NOTES.txt) FFTW 2.1.x and 3.x work. Debian packages: fftw2 fftw-dev fftw3 fftw3-dev __ http://www.fftw.org/ NOTES ----- 1) To use ATLAS, version 3.2.1 or newer and a *complete* LAPACK library are required. See http://math-atlas.sourceforge.net/errata.html#completelp for instructions. Please be aware than building your own atlas is error-prone, and should be avoided as much as possible if you don't want to spend time on build issues. Use the blas/lapack packaged by your distribution on Linux; on Mac Os X, you should use the vecLib/Accelerate framework, which are available when installing the apple development tools. Below follows basic steps for building ATLAS+LAPACK from scratch. In case of trouble, consult the documentation of the corresponding software. * Get and unpack http://www.netlib.org/lapack/lapack.tgz to ``/path/to/src/``. * Copy proper ``/path/to/src/LAPACK/INSTALL/make.inc.?????`` to ``/path/to/src/LAPACK/make.inc``. * Build LAPACK:: cd /path/to/src/LAPACK make lapacklib # On 400MHz PII it takes about 15min. that will create lapack_LINUX.a when using INSTALL/make.inc.LINUX, for example. If using Intel Fortran Compiler, see additional notes below. * Get the latest stable ATLAS sources from http://math-atlas.sourceforge.net/ and unpack to ``/path/to/src/``. * Build ATLAS:: cd /path/to/src/ATLAS make # Number of questions will be asked make install arch=Linux_PII # This takes about 45min. where arch may vary (see the output of the previous command). * Make optimized LAPACK library:: cd /path/to/src/ATLAS/lib/Linux_PII/ mkdir tmp; cd tmp ar x ../liblapack.a cp /path/to/src/LAPACK/lapack_LINUX.a ../liblapack.a ar r ../liblapack.a *.o cd ..; rm -rf tmp * Move all ``lib*.a`` files from ``/path/to/src/ATLAS/lib/Linux_PII/``, say, to ``/usr/local/lib/atlas/``. Also copying ``/path/to/src/ATLAS/include/{cblas.h,clapack.h}`` to ``/usr/local/lib/atlas/`` might be a good idea. * Define environment variable ATLAS that contains path to the directory where you moved the atlas libraries. For example, in bash run:: export ATLAS=/usr/local/lib/atlas 2) If you are willing to sacrifice the performance (by factor of 5 to 15 for large problems) of the linalg module then it is possible to build SciPy without ATLAS. For that you'll need either Fortran LAPACK/BLAS libraries installed in your system or Fortran LAPACK/BLAS sources to be accessible by SciPy setup scripts (use ``LAPACK_SRC``/``BLAS_SRC`` environment variables to indicate the location of the corresponding source directories). More details of how to do this are on the SciPy Wiki, at: http://www.scipy.org/Installing_SciPy/BuildingGeneral 3) Users of Debian (and derivatives like Ubuntu) can use the following deb packages:: atlas2-headers and atlas2-base atlas2-base-dev or atlas2-sse atlas2-sse-dev or atlas2-sse2 atlas2-sse2-dev or atlas2-3dnow atlas2-3dnow-dev It is not necessary to install blas or lapack libraries in addition. 4) Compiler flags customization (FFLAGS, CFLAGS, etc...). If you customize CFLAGS and other related flags from the command line or the shell environment, beware that is does not have the standard behavior of appending options. Instead, it overrides the options. As such, you have to give all options in the flag for the build to be successful. GETTING SCIPY ============= For the latest information, see the web site: http://www.scipy.org Development version from Subversion (SVN) ----------------------------------------- Use the command:: svn co http://svn.scipy.org/svn/scipy/trunk scipy Before building and installing from SVN, remove the old installation (e.g. in /usr/lib/python2.4/site-packages/scipy or $HOME/lib/python2.4/site-packages/scipy). Then type: cd scipy rm -rf build python setup.py install INSTALLATION ============ First make sure that all SciPy prerequisites are installed and working properly. Then be sure to remove any old SciPy installations (e.g. /usr/lib/python2.4/site-packages/scipy or $HOME/lib/python2.4/ site-packages/scipy). From tarballs ------------- Unpack ``SciPy-.tar.gz``, change to the ``SciPy-/`` directory, and run :: python setup.py install This may take several minutes to an hour depending on the speed of your computer. This may require root privileges. To install to a user-specific location instead, run python setup.py install --prefix=$MYDIR where $MYDIR is, for example, $HOME or $HOME/usr. TESTING ======= To test SciPy after installation (highly recommended), execute in Python >>> import scipy >>> scipy.test() To run the full test suite use >>> scipy.test('full') Please note that you must have version 0.10 or later of the 'nose' test framework installed in order to run the tests. More information about nose is available here: http://somethingaboutorange.com/mrl/projects/nose/ COMPILER NOTES ============== Note that SciPy is developed mainly using GNU compilers. Compilers from other vendors such as Intel, Absoft, Sun, NAG, Compaq, Vast, Porland, Lahey, HP, IBM are supported in the form of community feedback. gcc__ compiler is recommended. gcc 3.x and 4.x are known to work. If building on OS X, you should use the provided gcc by xcode tools, and the gfortran compiler available here: http://r.research.att.com/tools/ You can specify which Fortran compiler to use by using the following install command:: python setup.py config_fc --fcompiler= install To see a valid list of names, run:: python setup.py config_fc --help-fcompiler IMPORTANT: It is highly recommended that all libraries that scipy uses (e.g. blas and atlas libraries) are built with the same Fortran compiler. In most cases, if you mix compilers, you will not be able to import scipy at best, have crashes and random results at worse. __ http://gcc.gnu.org/ Using non-GNU Fortran compiler with gcc/g77 compiled Atlas/Lapack libraries --------------------------------------------------------------------------- When Atlas/Lapack libraries are compiled with GNU compilers but one wishes to build scipy with some non-GNU Fortran compiler then linking extension modules may require -lg2c. You can specify it in installation command line as follows:: python setup.py build build_ext -lg2c install If using non-GNU C compiler or linker, the location of g2c library can be specified in a similar manner using -L/path/to/libg2c.a after build_ext command. Intel Fortran Compiler ---------------------- Note that code compiled by the Intel Fortran Compiler (IFC) is not binary compatible with code compiled by g77. Therefore, when using IFC, all Fortran codes used in SciPy must be compiled with IFC. This also includes the LAPACK, BLAS, and ATLAS libraries. Using GCC for compiling C code is OK. IFC version 5.0 is not supported (because it has bugs that cause SciPy's tests to segfault). Minimum IFC flags for building LAPACK and ATLAS are :: -FI -w90 -w95 -cm -O3 -unroll Also consult 'ifc -help' for additional optimization flags suitable for your computers CPU. When finishing LAPACK build, you must recompile ?lamch.f, xerbla.f with optimization disabled (otherwise infinite loops occur when using these routines):: make lapacklib # in /path/to/src/LAPACK/ cd SRC ifc -FI -w90 -w95 -cm -O0 -c ?lamch.f xerbla.f cd .. make lapacklib KNOWN INSTALLATION PROBLEMS =========================== BLAS sources shipped with LAPACK are incomplete ----------------------------------------------- Some distributions (e.g. Redhat Linux 7.1) provide BLAS libraries that are built from such incomplete sources and therefore cause import errors like :: ImportError: .../fblas.so: undefined symbol: srotmg_ Fix: Use ATLAS or the official release of BLAS libraries. LAPACK library provided by ATLAS is incomplete ---------------------------------------------- You will notice it when getting import errors like :: ImportError: .../flapack.so : undefined symbol: sgesdd_ To be sure that SciPy is built against a complete LAPACK, check the size of the file liblapack.a -- it should be about 6MB. The location of liblapack.a is shown by executing :: python /lib/python2.4/site-packages/numpy/distutils/system_info.py (or the appropriate installation directory). To fix: follow the instructions in http://math-atlas.sourceforge.net/errata.html#completelp to create a complete liblapack.a. Then copy liblapack.a to the same location where libatlas.a is installed and retry with scipy build. Using ATLAS 3.2.1 ----------------- If import clapack fails with the following error :: ImportError: .../clapack.so : undefined symbol: clapack_sgetri then you most probably have ATLAS 3.2.1 but linalg module was built for newer versions of ATLAS. Fix: 1) Remove Lib/linalg/clapack.pyf 2) Rebuild/reinstall scipy. Using non-GNU Fortran Compiler ------------------------------ If import scipy shows a message :: ImportError: undefined symbol: s_wsfe and you are using non-GNU Fortran compiler, then it means that any of the (may be system provided) Fortran libraries such as LAPACK or BLAS were compiled with g77. See also compilers notes above. Recommended fix: Recompile all Fortran libraries with the same Fortran compiler and rebuild/reinstall scipy. Another fix: See `Using non-GNU Fortran compiler with gcc/g77 compiled Atlas/Lapack libraries` section above. TROUBLESHOOTING =============== If you experience problems when building/installing/testing SciPy, you can ask help from scipy-user@scipy.org or scipy-dev@scipy.org mailing lists. Please include the following information in your message: NOTE: You can generate some of the following information (items 1-5,7) in one command:: python -c 'from numpy.f2py.diagnose import run; run()' 1) Platform information:: python -c 'import os,sys;print os.name,sys.platform' uname -a OS, its distribution name and version information etc. 2) Information about C,C++,Fortran compilers/linkers as reported by the compilers when requesting their version information, e.g., the output of :: gcc -v g77 --version 3) Python version:: python -c 'import sys;print sys.version' 4) NumPy version:: python -c 'import numpy;print numpy.__version__' 5) ATLAS version, the locations of atlas and lapack libraries, building information if any. If you have ATLAS version 3.3.6 or newer, then give the output of the last command in :: cd scipy/Lib/linalg python setup_atlas_version.py build_ext --inplace --force python -c 'import atlas_version' 7) The output of the following commands :: python INSTALLDIR/numpy/distutils/system_info.py where INSTALLDIR is, for example, /usr/lib/python2.4/site-packages/. 8) Feel free to add any other relevant information. For example, the full output (both stdout and stderr) of the SciPy installation command can be very helpful. Since this output can be rather large, ask before sending it into the mailing list (or better yet, to one of the developers, if asked). 9) In case of failing to import extension modules, the output of :: ldd /path/to/ext_module.so can be useful. You may find the following notes useful: http://www.tuxedo.org/~esr/faqs/smart-questions.html http://www.chiark.greenend.org.uk/~sgtatham/bugs.html