single |
setuptools_scm
==============
setuptools_scm extracts Python package versions from git or
hg 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 supports 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", "setuptools_scm[toml]>=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, you need to set the version
dynamically in the project section of ``pyproject.toml``:
.. code:: toml
# pyproject.toml
[project]
# version = "0.0.1" # Remove any existing version parameter.
dynamic = ["version"]
Then 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"
Where pkg is the name of your package.
If you need to confirm which version string is being generated
or debug the configuration, you can install
`setuptools-scm `_
directly in your working environment and run:
.. code-block:: shell
$ python -m setuptools_scm
# To explore other options, try:
$ python -m setuptools_scm --help
``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
|