single |
setuptools_scm
==============
setuptools_scm handles managing your Python package versions
in SCM metadata instead of declaring them as the version argument
or in a SCM managed file.
Additionally setuptools_scm provides setuptools with a list of files that
are managed by the SCM
(i.e. it automatically adds all of the SCM-managed files to the sdist).
Unwanted files must be excluded by discarding them via ``MANIFEST.in``.
setuptools_scm support the following scm out of the box:
* git
* mercurial
``pyproject.toml`` usage
------------------------
The preferred way to configure setuptools_scm is to author
settings in a ``tool.setuptools_scm section of pyproject.toml``.
This feature requires Setuptools 42 or later, released in Nov, 2019.
If your project needs to support build from sdist on older versions
of Setuptools, you will need to also implement the ``setup.py usage``
for those legacy environments.
First, ensure that setuptools_scm is present during the project's
built step by specifying it as one of the build requirements.
.. code:: toml
# pyproject.toml
[build-system]
requires = ["setuptools>=45", "wheel", "setuptools_scm>=6.2"]
That will be sufficient to require setuptools_scm for projects
that support PEP 518 ([pip] and
[pep517]). Many tools,
especially those that invoke ``setup.py`` for any reason, may
continue to rely on setup_requires. For maximum compatibility
with those uses, consider also including a setup_requires directive
(described below in ``setup.py usage and setup.cfg``).
To enable version inference, add this section to your pyproject.toml:
.. code:: toml
# pyproject.toml
[tool.setuptools_scm]
Including this section is comparable to supplying
``use_scm_version=True in setup.py``. Additionally,
include arbitrary keyword arguments in that section
to be supplied to ``get_version()``. For example:
.. code:: toml
# pyproject.toml
[tool.setuptools_scm]
write_to = "pkg/_version.py"
``setup.py`` usage (deprecated)
-------------------------------
.. warning::
setup_requires has been deprecated in favor of ``pyproject.toml
The following settings are considered legacy behavior and
superseded by the pyproject.toml`` usage, but for maximal
compatibility, projects may also supply the configuration in
this older form.
To use setuptools_scm just modify your project's ``setup.py`` file
like this:
* Add setuptools_scm to the setup_requires parameter.
* Add the use_scm_version parameter and set it to True.
For example:
.. code:: python
from setuptools import setup
setup(
...,
use_scm_version=True,
setup_requires=['setuptools_scm'],
...,
)
Arguments to ``get_version()`` (see below) may be passed as a dictionary to
use_scm_version. For example:
.. code:: python
from setuptools import setup
|