setup.cfg
is a cheekily named Python package which supports providing all of a Python distribution's metadata and build configuration via the setup.cfg
file at the base of the distribution's source tree, rather than in the setup.py
script.
The standard setup.py
script is reduced to a stub which uses the setup.cfg
package to convert the contents of the setup.cfg
file to keyword arguments understood by the setup()
function (in particular, the implementation provided by setuptools). Thus all the standard functionality of the setup.py
script is still supported for tools and procedures that use it.
In other words, rather than defining your project in a source file, it is defined in an easy to parse, easy to read plain-text file. However, several hook points are still provided where Python functions can modify the build process if necessary. But efforts are made to minimize the need for this in the majority of Python projects.
This package was originally called d2to1
, and was intended as a temporary translation layer between the original distutils and the ill-fated distutils2 project. distutils2 introduced the idea of providing all the project's metadata and build configuration via the setup.cfg
file. This project takes the same idea but goes beyond what was fully supported by distutils2.
setup.cfg
requires a distribution to use setuptools. Your distribution must include a specially-formatted "setup.cfg" file, and a minimal "setup.py" script. For details on writing the setup.cfg, see the distutils2 documentation. A simple sample can be found in setup.cfg
's own setup.cfg file (it uses its own machinery to install itself):
[metadata]
name = setup.cfg
version = 0.9.0.dev
author = Erik M. Bray
author-email = embray@stsci.edu
summary = Reads a distributions's metadata from its setup.cfg file and passes it to setuptools.setup()
description-file =
README.rst
CHANGES.rst
home-page = http://pypi.python.org/pypi/setup.cfg
requires-dist = setuptools
classifier =
Development Status :: 5 - Production/Stable
Environment :: Plugins
Framework :: Setuptools Plugin
Intended Audience :: Developers
License :: OSI Approved :: BSD License
Operating System :: OS Independent
Programming Language :: Python
Programming Language :: Python :: 3
Topic :: Software Development :: Build Tools
Topic :: Software Development :: Libraries :: Python Modules
Topic :: System :: Archiving :: Packaging
[files]
packages =
setup
setup.cfg
setup.cfg.extern
extra_files =
CHANGES.rst
LICENSE
ez_setup.py
The minimal setup.py should look something like this:
#!/usr/bin/env python
try:
from setuptools import setup
except ImportError:
from ez_setup import use_setuptools
use_setuptools()
from setuptools import setup
setup(
setup_requires=['setup.cfg'],
setup_cfg=True
)
Note that it's important to specify setup_cfg=True
or else the setup.cfg
functionality will not be enabled. It is also possible to set setup_cfg='some_file.cfg'
to specify the (relative) path of the setup.cfg file to use. But in general this functionality should not be necessary.
It should also work fine if additional arguments are passed to setup()
, but it should be noted that they will be clobbered by any options in the setup.cfg file.