See http://www.scipy.org/Installing_SciPy/ for more extensive (and possibly more up-to-date) build instructions.
Contents
It is strongly recommended that you use either a complete scientific Python distribution or binary packages on your platform if they are available, in particular on Windows and Mac OS X. You should not attempt to build SciPy if you are not familiar with compiling software from sources.
Recommended distributions are:
- Enthought Canopy (https://www.enthought.com/products/canopy/)
- Anaconda (https://store.continuum.io/cshop/anaconda)
- Python(x,y) (http://code.google.com/p/pythonxy/)
- WinPython (http://code.google.com/p/winpython/)
SciPy requires the following software installed for your platform:
- Python 2.6.x or newer
- NumPy 1.6.2 or newer (note: SciPy trunk at times requires latest NumPy trunk).
- If you want to build the documentation: Sphinx 1.1.0 or newer
- If you want to build SciPy master or other unreleased version from source (Cython-generated C sources are included in official releases): Cython 0.22 or newer
It is recommended to use the mingw compilers on Windows: you will need gcc (C), g++ (C++) and g77 (Fortran) compilers.
Blas/Lapack are core routines for linear algebra (vector/matrix operations). You should use ATLAS with a full LAPACK, or simple BLAS/LAPACK built with g77 from netlib sources. Building those libraries on windows may be difficult, as they assume a unix-style environment. Please use the binaries if you don't feel comfortable with cygwin, make and similar tools.
It is recommended to use gcc. gcc is available for free when installing Xcode, the developer toolsuite on Mac OS X. You also need a fortran compiler, which is not included with Xcode: you should use gfortran from this page:
http://r.research.att.com/tools/
Please do NOT use gfortran from hpc.sourceforge.net, it is known to generate buggy scipy binaries.
Mac OS X includes the Accelerate framework: it should be detected without any intervention when building SciPy.
Most common distributions include all the dependencies. Here are some instructions for the most common ones:
You can get all the dependencies as follows:
sudo apt-get install python python-dev libatlas-base-dev gcc gfortran g++
You can get all the dependencies as follows:
sudo apt-get install python python-dev atlas3-base-dev gcc g77 g++
For the latest information, see the web site:
http://www.scipy.org
Use the command:
git clone https://github.com/scipy/scipy.git
Before building and installing from git, remove the old installation (e.g. in /usr/lib/python3.4/site-packages/scipy or $HOME/lib/python3.4/site-packages/scipy). Then type:
cd scipy
git clean -xdf
python setup.py install
Type:
cd scipy
python setup.py build_sphinx
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/python3.4/site-packages/scipy or $HOME/lib/python3.4/ site-packages/scipy). On windows, if you installed scipy previously from a binary, use the remove facility from the add/remove software panel, or remote the scipy directory by hand if you installed from sources (e.g. C:Python34Libsite-packagesscipy for python 3.4).
Unpack SciPy-<version>.tar.gz
, change to the SciPy-<version>/
directory, and run
python setup.py install
This may take several minutes to an hour depending on the speed of your computer. To install to a user-specific location instead, run:
python setup.py install --prefix=$MYDIR
where $MYDIR is, for example, $HOME or $HOME/usr.
** Note 1: On Unix, you should avoid installing in /usr, but rather in /usr/local or somewhere else. /usr is generally 'owned' by your package manager, and you may overwrite a packaged scipy this way.
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 on the website.
Note that SciPy is developed mainly using GNU compilers. Compilers from other vendors such as Intel, Absoft, Sun, NAG, Compaq, Vast, Portland, 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=<Vendor> install
To see a valid list of <Vendor> 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.
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.
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.
If you want to have the LAPACK tests pass the 'ieee' compliancy test, you have to use the -mp (='more precise') compiler option. Note that there's a significant hit on the resulting performance though, reducing it to almost GNU level, but not quite.
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
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.
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/python3.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#completelpto create a complete liblapack.a. Then copy liblapack.a to the same location where libatlas.a is installed and retry with scipy build.
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.
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()'
Platform information:
python -c 'import os, sys; print(os.name, sys.platform)' uname -a OS, its distribution name and version information etc.
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
Python version:
python -c 'import sys; print(sys.version)'
NumPy version:
python -c 'import numpy; print(numpy.__version__)'
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'
The output of the following commands
python INSTALLDIR/numpy/distutils/system_info.py
where INSTALLDIR is, for example, /usr/lib/python3.4/site-packages/.
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).
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: