summaryrefslogtreecommitdiff
path: root/INSTALL.rst.txt
blob: 6f96daabfdf837992dd3847f4534a9478ef53e4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
Building and installing NumPy
+++++++++++++++++++++++++++++

**IMPORTANT**: the below notes are about building NumPy, which for most users
is *not* the recommended way to install NumPy.  Instead, use either a complete
scientific Python distribution (recommended) or a binary installer - see
http://scipy.org/install.html.


.. Contents::

Prerequisites
=============

Building NumPy requires the following software installed:

1) For Python 2, Python__ 2.7.x or newer.
   For Python 3, Python__ 3.4.x or newer.

   On Debian and derivative (Ubuntu): python python-dev

   On Windows: the official python installer on Python__ is enough

   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.

2) Cython >= 0.19 (for development versions of numpy, not for released
                   versions)
3) nose__ (optional) 1.0 or later

   This is required for testing numpy, but not for using it.

Python__ http://www.python.org
nose__ http://nose.readthedocs.io


.. note:: 

   If you want to build NumPy in order to work on NumPy itself, use
   ``runtests.py``.  For more details, see
   http://docs.scipy.org/doc/numpy-dev/dev/development_environment.html

.. note::

   More extensive information on building NumPy (and Scipy) is maintained at
   http://scipy.org/scipylib/building/index.html


Basic Installation
==================

To install numpy run::

    python setup.py build -j 4 install --prefix $HOME/.local

This will compile numpy on 4 CPUs and install it into the specified prefix.
To perform an inplace build that can be run from the source folder run::

    python setup.py build_ext --inplace -j 4

Note that the ``python`` command here is the system default Python, generally
python 2, the ``python3`` command may be needed to install on python 3.
See `Requirements for Installing Packages <https://packaging.python.org/tutorials/installing-packages/>`_
for more details.

The number of build jobs can also be specified via the environment variable
NPY_NUM_BUILD_JOBS.


Choosing compilers
==================

NumPy needs a C compiler, and for development versions also Cython.  A Fortran
compiler isn't needed to build NumPy itself; the ``numpy.f2py`` tests will be
skipped when running the test suite if no Fortran compiler is available.  For
building Scipy a Fortran compiler is needed though, so we include some details
on Fortran compilers in the rest of this section.

On OS X and Linux, all common compilers will work.  Note that for Fortran,
``gfortran`` is strongly preferred over ``g77``, but if you happen to have both
installed then ``g77`` will be detected and used first.  To explicitly select
``gfortran`` in that case, do::

    python setup.py build --fcompiler=gnu95

Windows
-------

On Windows, building from source can be difficult.  Currently the most robust
option is to use the Intel compilers, or alternatively MSVC (the same version
as used to build Python itself) with Intel ifort.  Intel itself maintains a
good `application note <https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl>`_
on this.

If you want to use a free compiler toolchain, the recommended compiler is MingwPy__.
The older MinGW32 compiler set used to produce older .exe installers for NumPy
itself is still available at https://github.com/numpy/numpy-vendor, but not
recommended for use anymore.

MingwPy__ http://mingwpy.github.io


Building with optimized BLAS support
====================================

Configuring which BLAS/LAPACK is used if you have multiple libraries installed,
or you have only one installed but in a non-standard location, is done via a
``site.cfg`` file.  See the ``site.cfg.example`` shipped with NumPy for more
details.

Windows
-------

The Intel compilers work with Intel MKL, see the application note linked above. 
MingwPy__ works with OpenBLAS.
For an overview of the state of BLAS/LAPACK libraries on Windows, see 
`here <http://mingwpy.github.io/blas_lapack.html>`_.

OS X
----

OS X ships the Accelerate framework, which NumPy can build against without any
manual configuration.  Other BLAS/LAPACK implementations (OpenBLAS, Intel MKL,
ATLAS) will also work.

Ubuntu/Debian
-------------

For best performance a development package providing BLAS and CBLAS should be
installed.  Some of the options available are:

- ``libblas-dev``: reference BLAS (not very optimized)
- ``libatlas-base-dev``: generic tuned ATLAS, it is recommended to tune it to
  the available hardware, see /usr/share/doc/libatlas3-base/README.Debian for
  instructions
- ``libopenblas-base``: fast and runtime detected so no tuning required but a
  very recent version is needed (>=0.2.15 is recommended).  Older versions of
  OpenBLAS suffered from correctness issues on some CPUs.

The package linked to when numpy is loaded can be chosen after installation via
the alternatives mechanism::

    update-alternatives --config libblas.so.3
    update-alternatives --config liblapack.so.3

Or by preloading a specific BLAS library with::

    LD_PRELOAD=/usr/lib/atlas-base/atlas/libblas.so.3 python ...


Build issues
============

If you run into build issues and need help, the NumPy
`mailing list <http://scipy.org/scipylib/mailing-lists.html>`_ is the best
place to ask.  If the issue is clearly a bug in NumPy, please file an issue (or
even better, a pull request) at https://github.com/numpy/numpy.