python-sbom
===========
SBOMs for Python distributions. python-sbom writes a `CycloneDX `_ 1.6 SBOM into every wheel you
build, at ``-.dist-info/sboms/.cdx.json``. That is where `PEP 770
`_ tells installers to keep SBOMs, so they land in the environment next to the
installed package, where scanners look for them.
Why a wheel needs its own SBOM
------------------------------
General-purpose scanners read the dependencies a package declares or the packages an environment has installed. They
cannot see a wheel your project ships as a data file, and they cannot say how the wheel was built. The SBOM this package
writes records both: the wheels you bundle, with their hashes, licenses and vendored packages, and the Python version
and packages of the build environment. A third party can use that record to rebuild the wheel and compare the bytes.
Quick start
-----------
For a project built with `hatchling `_, add the hook to the build requirements and enable
it in ``pyproject.toml``:
.. code-block:: toml
[build-system]
build-backend = 'hatchling.build'
requires = ['hatchling>=1.28', 'python-sbom[hatch]>=0.1']
[tool.hatch.build.hooks.python-sbom]
Every wheel you build now carries the SBOM. For a project built with another backend, such as meson-python, run
``python-sbom embed dist/*.whl`` after the build; :doc:`usage` shows both.
.. toctree::
:maxdepth: 2
usage
extend
explanation
cli
py_api
changelog
contributing