#### Previous topic

Using F2PY

#### Next topic

Advanced F2PY usages

# Using via `numpy.distutils`

`numpy.distutils` is part of NumPy extending standard Python `distutils` to deal with Fortran sources and F2PY signature files, e.g. compile Fortran sources, call F2PY to construct extension modules, etc.

Example

Consider the following setup file:

    from __future__ import division, absolute_import, print_function

    from numpy.distutils.core import Extension

    ext1 = Extension(name = 'scalar',
                     sources = ['scalar.f'])
    ext2 = Extension(name = 'fib2',
                     sources = ['fib2.pyf', 'fib1.f'])

    if __name__ == "__main__":
        from numpy.distutils.core import setup
        setup(name = 'f2py_example',
              description       = "F2PY Users Guide examples",
              author            = "Pearu Peterson",
              author_email      = "pearu@cens.ioc.ee",
              ext_modules = [ext1, ext2]
              )
    # End of setup_example.py

Running

    python setup_example.py build

will build two extension modules `scalar` and `fib2` to the build directory.

`numpy.distutils` extends `distutils` with the following features:

- `Extension` class argument `sources` may contain Fortran source files. In addition, the list `sources` may contain at most one F2PY signature file, and then the name of an Extension module must match with the `<modulename>` used in signature file. It is assumed that an F2PY signature file contains exactly one `python module` block.

  If `sources` does not contain a signature files, then F2PY is used to scan Fortran source files for routine signatures to construct the wrappers to Fortran codes.

  Additional options to F2PY process can be given using `Extension` class argument `f2py_options`.

- The following new `distutils` commands are defined:

  `build_src`

    to construct Fortran wrapper extension modules, among many other things.

  `config_fc`

    to change Fortran compiler options

  as well as `build_ext` and `build_clib` commands are enhanced to support Fortran sources.

  Run

      python <setup.py file> config_fc build_src build_ext --help

  to see available options for these commands.

- When building Python packages containing Fortran sources, then one can choose different Fortran compilers by using `build_ext` command option `--fcompiler=<Vendor>`. Here `<Vendor>` can be one of the following names:

      absoft sun mips intel intelv intele intelev nag compaq compaqv gnu vast pg hpux

  See `numpy_distutils/fcompiler.py` for up-to-date list of supported compilers or run

      f2py -c --help-fcompiler