tmp
/
pip-install-ghxuqwgs
/numpy_78e94bf2b6094bf9a1f3d92042f9bf46
/doc
/source
/reference
/distutils.rst
| ********************************** | |
| Packaging (:mod:`numpy.distutils`) | |
| ********************************** | |
| .. module:: numpy.distutils | |
| NumPy provides enhanced distutils functionality to make it easier to | |
| build and install sub-packages, auto-generate code, and extension | |
| modules that use Fortran-compiled libraries. To use features of NumPy | |
| distutils, use the :func:`setup <core.setup>` command from | |
| A useful :class:`Configuration | |
| <misc_util.Configuration>` class is also provided in | |
| :mod:`numpy.distutils.misc_util` that can make it easier to construct | |
| keyword arguments to pass to the setup function (by passing the | |
| dictionary obtained from the todict() method of the class). More | |
| information is available in the NumPy Distutils Users Guide in | |
| ``<site-packages>/numpy/doc/DISTUTILS.txt``. | |
| .. index:: | |
| single: distutils | |
| Modules in :mod:`numpy.distutils` | |
| ================================= | |
| misc_util | |
| --------- | |
| .. module:: numpy.distutils.misc_util | |
| .. autosummary:: | |
| :toctree: generated/ | |
| get_numpy_include_dirs | |
| dict_append | |
| appendpath | |
| allpath | |
| dot_join | |
| generate_config_py | |
| get_cmd | |
| terminal_has_colors | |
| red_text | |
| green_text | |
| yellow_text | |
| blue_text | |
| cyan_text | |
| cyg2win32 | |
| all_strings | |
| has_f_sources | |
| has_cxx_sources | |
| filter_sources | |
| get_dependencies | |
| is_local_src_dir | |
| get_ext_source_files | |
| get_script_files | |
| .. class:: Configuration(package_name=None, parent_name=None, top_path=None, package_path=None, **attrs) | |
| Construct a configuration instance for the given package name. If | |
| *parent_name* is not None, then construct the package as a | |
| sub-package of the *parent_name* package. If *top_path* and | |
| *package_path* are None then they are assumed equal to | |
| the path of the file this instance was created in. The setup.py | |
| files in the numpy distribution are good examples of how to use | |
| the :class:`Configuration` instance. | |
| .. automethod:: todict | |
| .. automethod:: get_distribution | |
| .. automethod:: get_subpackage | |
| .. automethod:: add_subpackage | |
| .. automethod:: add_data_files | |
| .. automethod:: add_data_dir | |
| .. automethod:: add_include_dirs | |
| .. automethod:: add_headers | |
| .. automethod:: add_extension | |
| .. automethod:: add_library | |
| .. automethod:: add_scripts | |
| .. automethod:: add_installed_library | |
| .. automethod:: add_npy_pkg_config | |
| .. automethod:: paths | |
| .. automethod:: get_config_cmd | |
| .. automethod:: get_build_temp_dir | |
| .. automethod:: have_f77c | |
| .. automethod:: have_f90c | |
| .. automethod:: get_version | |
| .. automethod:: make_svn_version_py | |
| .. automethod:: make_config_py | |
| .. automethod:: get_info | |
| Other modules | |
| ------------- | |
| .. currentmodule:: numpy.distutils | |
| .. autosummary:: | |
| :toctree: generated/ | |
| system_info.get_info | |
| system_info.get_standard_file | |
| cpuinfo.cpu | |
| log.set_verbosity | |
| exec_command | |
| Building Installable C libraries | |
| ================================ | |
| Conventional C libraries (installed through `add_library`) are not installed, and | |
| are just used during the build (they are statically linked). An installable C | |
| library is a pure C library, which does not depend on the python C runtime, and | |
| is installed such that it may be used by third-party packages. To build and | |
| install the C library, you just use the method `add_installed_library` instead of | |
| `add_library`, which takes the same arguments except for an additional | |
| ``install_dir`` argument:: | |
| >>> config.add_installed_library('foo', sources=['foo.c'], install_dir='lib') | |
| npy-pkg-config files | |
| -------------------- | |
| To make the necessary build options available to third parties, you could use | |
| the `npy-pkg-config` mechanism implemented in `numpy.distutils`. This mechanism is | |
| based on a .ini file which contains all the options. A .ini file is very | |
| similar to .pc files as used by the pkg-config unix utility:: | |
| [meta] | |
| Name: foo | |
| Version: 1.0 | |
| Description: foo library | |
| [variables] | |
| prefix = /home/user/local | |
| libdir = ${prefix}/lib | |
| includedir = ${prefix}/include | |
| [default] | |
| cflags = -I${includedir} | |
| libs = -L${libdir} -lfoo | |
| Generally, the file needs to be generated during the build, since it needs some | |
| information known at build time only (e.g. prefix). This is mostly automatic if | |
| one uses the `Configuration` method `add_npy_pkg_config`. Assuming we have a | |
| template file foo.ini.in as follows:: | |
| [meta] | |
| Name: foo | |
| Version: @version@ | |
| Description: foo library | |
| [variables] | |
| prefix = @prefix@ | |
| libdir = ${prefix}/lib | |
| includedir = ${prefix}/include | |
| [default] | |
| cflags = -I${includedir} | |
| libs = -L${libdir} -lfoo | |
| and the following code in setup.py:: | |
| >>> config.add_installed_library('foo', sources=['foo.c'], install_dir='lib') | |
| >>> subst = {'version': '1.0'} | |
| >>> config.add_npy_pkg_config('foo.ini.in', 'lib', subst_dict=subst) | |
| This will install the file foo.ini into the directory package_dir/lib, and the | |
| foo.ini file will be generated from foo.ini.in, where each ``@version@`` will be | |
| replaced by ``subst_dict['version']``. The dictionary has an additional prefix | |
| substitution rule automatically added, which contains the install prefix (since | |
| this is not easy to get from setup.py). npy-pkg-config files can also be | |
| installed at the same location as used for numpy, using the path returned from | |
| `get_npy_pkg_dir` function. | |
| Reusing a C library from another package | |
| ---------------------------------------- | |
| Info are easily retrieved from the `get_info` function in | |
| `numpy.distutils.misc_util`:: | |
| >>> info = get_info('npymath') | |
| >>> config.add_extension('foo', sources=['foo.c'], extra_info=**info) | |
| An additional list of paths to look for .ini files can be given to `get_info`. | |
| Conversion of ``.src`` files | |
| ============================ | |
| NumPy distutils supports automatic conversion of source files named | |
| <somefile>.src. This facility can be used to maintain very similar | |
| code blocks requiring only simple changes between blocks. During the | |
| build phase of setup, if a template file named <somefile>.src is | |
| encountered, a new file named <somefile> is constructed from the | |
| template and placed in the build directory to be used instead. Two | |
| forms of template conversion are supported. The first form occurs for | |
| files named named <file>.ext.src where ext is a recognized Fortran | |
| extension (f, f90, f95, f77, for, ftn, pyf). The second form is used | |
| for all other cases. | |
| .. index:: | |
| single: code generation | |
| Fortran files | |
| ------------- | |
| This template converter will replicate all **function** and | |
| **subroutine** blocks in the file with names that contain '<...>' | |
| according to the rules in '<...>'. The number of comma-separated words | |
| in '<...>' determines the number of times the block is repeated. What | |
| these words are indicates what that repeat rule, '<...>', should be | |
| replaced with in each block. All of the repeat rules in a block must | |
| contain the same number of comma-separated words indicating the number | |
| of times that block should be repeated. If the word in the repeat rule | |
| needs a comma, leftarrow, or rightarrow, then prepend it with a | |
| backslash ' \'. If a word in the repeat rule matches ' \\<index>' then | |
| it will be replaced with the <index>-th word in the same repeat | |
| specification. There are two forms for the repeat rule: named and | |
| short. | |
| Named repeat rule | |
| ^^^^^^^^^^^^^^^^^ | |
| A named repeat rule is useful when the same set of repeats must be | |
| used several times in a block. It is specified using <rule1=item1, | |
| item2, item3,..., itemN>, where N is the number of times the block | |
| should be repeated. On each repeat of the block, the entire | |
| expression, '<...>' will be replaced first with item1, and then with | |
| item2, and so forth until N repeats are accomplished. Once a named | |
| repeat specification has been introduced, the same repeat rule may be | |
| used **in the current block** by referring only to the name | |
| (i.e. <rule1>. | |
| Short repeat rule | |
| ^^^^^^^^^^^^^^^^^ | |
| A short repeat rule looks like <item1, item2, item3, ..., itemN>. The | |
| rule specifies that the entire expression, '<...>' should be replaced | |
| first with item1, and then with item2, and so forth until N repeats | |
| are accomplished. | |
| Pre-defined names | |
| ^^^^^^^^^^^^^^^^^ | |
| The following predefined named repeat rules are available: | |
| - <prefix=s,d,c,z> | |
| - <_c=s,d,c,z> | |
| - <_t=real, double precision, complex, double complex> | |
| - <ftype=real, double precision, complex, double complex> | |
| - <ctype=float, double, complex_float, complex_double> | |
| - <ftypereal=float, double precision, \\0, \\1> | |
| - <ctypereal=float, double, \\0, \\1> | |
| Other files | |
| ----------- | |
| Non-Fortran files use a separate syntax for defining template blocks | |
| that should be repeated using a variable expansion similar to the | |
| named repeat rules of the Fortran-specific repeats. The template rules | |
| for these files are: | |
| 1. "/\**begin repeat "on a line by itself marks the beginning of | |
| a segment that should be repeated. | |
| 2. Named variable expansions are defined using #name=item1, item2, item3, | |
| ..., itemN# and placed on successive lines. These variables are | |
| replaced in each repeat block with corresponding word. All named | |
| variables in the same repeat block must define the same number of | |
| words. | |
| 3. In specifying the repeat rule for a named variable, item*N is short- | |
| hand for item, item, ..., item repeated N times. In addition, | |
| parenthesis in combination with \*N can be used for grouping several | |
| items that should be repeated. Thus, #name=(item1, item2)*4# is | |
| equivalent to #name=item1, item2, item1, item2, item1, item2, item1, | |
| item2# | |
| 4. "\*/ "on a line by itself marks the end of the the variable expansion | |
| naming. The next line is the first line that will be repeated using | |
| the named rules. | |
| 5. Inside the block to be repeated, the variables that should be expanded | |
| are specified as @name@. | |
| 6. "/\**end repeat**/ "on a line by itself marks the previous line | |
| as the last line of the block to be repeated. | |