Skip to main content

CycloneDX Software Bill of Materials (SBOM) generation utility

Project description

CycloneDX Python SBOM Generation Tool

GitHub Workflow Status Docker Image GitHub license Python Version Support Slack Invite PyPI Version Python Version Support Group Discussion Twitter


This project provides a runnable Python-based application for generating CycloneDX bill-of-material documents from either:

  1. Your current Python Environment
  2. Your project's manifest (e.g. requirements.txt)

The BOM will contain an aggregate of all your current project's dependencies, or those defined by the manifest you supply.

CycloneDX is a lightweight BOM specification that is easily created, human-readable, and simple to parse.

Installation

Install this from PyPi.org using your preferred Python package manager.

Example using pip:

pip install cyclonedx-bom

Example using poetry:

poetry add cyclonedx-bom

Usage

Once installed, you can access the full documentation by running --help:

$ cyclonedx-py --help
usage: client.py [-h] (-e | -p | -r) [-pf FILE_PATH] [-rf FILE_PATH]
                 [--format {json,xml}] [--schema-version {1.3,1.2,1.1,1.0}]
                 [-o FILE_PATH] [-F] [-X]

CycloneDX SBOM Generator

optional arguments:
  -h, --help            show this help message and exit
  -e, --e, --environment
                        Build a SBOM based on the packages installed in your
                        current Python environment (default)
  -p, --p, --poetry     Build a SBOM based on a Poetry poetry.lock's contents.
                        Use with -pf to specify absolute pathto a
                        `poetry.lock` you wish to use, else we'll look for one
                        in the current working directory.
  -r, --r, --requirements
                        Build a SBOM based on a requirements.txt's contents.
                        Use with -rf to specify absolute pathto a
                        `requirements.txt` you wish to use, else we'll look
                        for one in the current working directory.
  -X                    Enable debug output

Poetry:
  Additional optional arguments if you are setting the input type to
  `poetry`

  -pf FILE_PATH, --pf FILE_PATH, --poetry-file FILE_PATH
                        Path to a the `poetry.lock` file you wish to parse

Requirements:
  Additional optional arguments if you are setting the input type to
  `requirements`.

  -rf FILE_PATH, --rf FILE_PATH, --requirements-file FILE_PATH
                        Path to a the `requirements.txt` file you wish to
                        parse

SBOM Output Configuration:
  Choose the output format and schema version

  --format {json,xml}   The output format for your SBOM (default: xml)
  --schema-version {1.3,1.2,1.1,1.0}
                        The CycloneDX schema version for your SBOM (default:
                        1.3)
  -o FILE_PATH, --o FILE_PATH, --output FILE_PATH
                        Output file path for your SBOM (set to '-' to output
                        to STDOUT)
  -F, --force           If outputting to a file and the stated file already
                        exists, it will be overwritten.

Building CycloneDX for your current Python environment

This will produce the most accurate and complete CycloneDX BOM as it will include all transitive dependencies required by the packages defined in your project's manifest (think requriements.txt).

Simply run:

cyclonedx-py -e -o -

This will generate a CycloneDX including all packages installed in your current Python environment and output to STDOUT in XML using the latest schema version 1.3 by default.

Building CycloneDX from your Manifest

Poetry

We support parsing your poetry.lock file which should be committed along with your pyrpoject.toml and details exact pinned versions.

You can then run cyclonedx-py as follows:

cyclonedx-py -p -pf PATH/TO/poetry.lock -o sbom.xml

Pip / Requirements

We currently support requirements.txt manifest files. Note that a BOM such as CycloneDX expects exact version numbers, therefore if you wish to generate a BOM from a requirements.txt, these must be frozen. This can be accomplished via:

pip freeze > requirements.txt

You can then run cyclonedx-py as follows:

cyclonedx-py -r -rf PATH/TO/requirements.txt -o sbom.xml

This will generate a CycloneDX and output to STDOUT in XML using the latest schema version 1.3 by default.

Note: If you failed to freeze your dependencies before passing the requirements.txt data to cyclonedx-py, you'll be warned about this and the dependencies that do not have pinned versions WILL NOT be included in the resulting CycloneDX output.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! Some of your dependencies do not have pinned version !!
!! numbers in your requirements.txt                     !!
!!                                                      !!
!! -> idna                                              !!
!! -> requests                                          !!
!! -> urllib3                                           !!
!!                                                      !!
!! The above will NOT be included in the generated      !!
!! CycloneDX as version is a mandatory field.           !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Python Support

We endeavour to support all functionality for all current actively supported Python versions. However, some features may not be possible/present in older Python versions due to their lack of support.

Copyright & License

CycloneDX BOM is Copyright (c) OWASP Foundation. All Rights Reserved.

Permission to modify and redistribute is granted under the terms of the Apache 2.0 license.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cyclonedx-bom-1.2.0.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

cyclonedx_bom-1.2.0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file cyclonedx-bom-1.2.0.tar.gz.

File metadata

  • Download URL: cyclonedx-bom-1.2.0.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for cyclonedx-bom-1.2.0.tar.gz
Algorithm Hash digest
SHA256 328520879ff11f0f39edf08bbca558e0993ed20c841d87dcc2febc2bc79c0a85
MD5 cb1138dcb79fd66436b2113466f13d98
BLAKE2b-256 62bbea71907c856280792e86e6e838c5b1e01dbd117cfb6954787f88cdef6182

See more details on using hashes here.

Provenance

File details

Details for the file cyclonedx_bom-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: cyclonedx_bom-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for cyclonedx_bom-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 053bdf668c28994a3933e1d6b43ab80683b2a268e636f61753992733926fe9ee
MD5 797be85deaa4361d7ecb254093453e70
BLAKE2b-256 be4565b4475c3b6a05c1ea120dea56e293cdd02db63d575e95d462ffa90a019a

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page