Using via numpy.distutils#

numpy.distutils is part of NumPy, and extends the standard Python distutils module 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.py for the fib and scalar examples from Three ways to wrap - getting started section:

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.

Extensions to distutils#

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 in this case, 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 do not contain a signature file, then F2PY is used to scan Fortran source files to construct wrappers to the Fortran codes.

    Additional options to the F2PY executable can be given using the 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.

    Additionally, the build_ext and build_clib commands are also 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, one can choose different Fortran compilers by using the build_ext command option --fcompiler=<Vendor>. Here <Vendor> can be one of the following names (on linux systems):

    absoft compaq fujitsu g95 gnu gnu95 intel intele intelem lahey nag nagfor nv pathf95 pg vast
    

    See numpy_distutils/fcompiler.py for an up-to-date list of supported compilers for different platforms, or run

    python -m numpy.f2py -c --help-fcompiler