Using extension-helpersΒΆ

To use extension-helpers in your package, you will need to make sure your package uses a pyproject.toml file as described in PEP 518.

You can then add extension-helpers to the build-time dependencies in your pyproject.toml file:

requires = ["setuptools", "wheel", "extension-helpers"]

If you have Cython extensions, you will need to make sure cython is included in the above list too.

The main functionality in extension-helpers is the get_extensions() function which can be used to collect package extensions. Defining functions is then done in two ways:

  • For simple Cython extensions, get_extensions() will automatically generate extension modules with no further work.

  • For other extensions, you can create files anywhere in your package, and these files can then include a get_extensions function that returns a list of setuptools.Extension objects.

In the second case, the idea is that for large packages, extensions can be defined in the relevant sub-packages rather than having to all be listed in the main file.

To use this, you should modify your file to use get_extensions() as follows:

from extension_helpers import get_extensions
setup(..., ext_modules=get_extensions())

Note that if you use this, extension-helpers will also we create a packagename.compiler_version submodule that contain information about the compilers used.

It is also possible to enable extension-helpers in setup.cfg instead of by adding the following configuration to the setup.cfg file:

use_extension_helpers = true

Moreover, one can also enable extension-helpers in pyproject.toml by adding the following configuration to the pyproject.toml file:

use_extension_helpers = true


For backwards compatibility, the setting of use_extension_helpers in setup.cfg will override any setting of it in pyproject.toml.