{"library":"spdx-tools","title":"SPDX Tools Python Library","type":"library","description":"The `spdx-tools` library is a Python implementation providing parsers, converters, validators, and handlers for SPDX (Software Package Data Exchange) documents. It supports SPDX specification versions 2.2 and 2.3, with experimental, write-only support for the upcoming SPDX v3.0 specification. Maintained by a community of SPDX adopters, it helps users with security, compliance, and understanding software supply chain dependencies. The current version is 0.8.5, with an active development pace that includes significant refactoring in recent major releases.","language":"python","status":"active","last_verified":"Thu May 21","install":{"commands":["pip install spdx-tools"],"cli":{"name":"spdx-tools","version":"sh: 1: spdx-tools: not found"}},"imports":["from spdx_tools.spdx.parser.parse_anything import parse_file","from spdx_tools.spdx.validation.document_validator import validate_full_spdx_document","from spdx_tools.spdx.model import Document","from spdx_tools.spdx3.bump_from_spdx2.spdx_document import bump_spdx_document"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":null,"github":"https://github.com/spdx/tools-python","docs":"https://spdx.github.io/tools-python/","changelog":"https://github.com/spdx/tools-python/blob/main/CHANGELOG.md","pypi":"https://pypi.org/project/spdx-tools/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"import io\nimport os\nimport tempfile\nfrom spdx_tools.spdx.parser.parse_anything import parse_file\nfrom spdx_tools.spdx.model import Document\n\n# Example SPDX Tag/Value content\nspdx_content = \"\"\"SPDXVersion: SPDX-2.3\nDataLicense: CC0-1.0\nSPDXID: SPDXRef-DOCUMENT\nDocumentName: example-software-bill-of-materials\nDocumentNamespace: http://spdx.org/spdxdocs/spdx-example-document-1.0\nCreator: Tool: spdx-tools-python-0.8.5\nCreated: 2026-04-10T12:00:00Z\n\"\"\"\n\ntemp_file_name = None\ntry:\n    # Write content to a temporary file for parsing\n    with tempfile.NamedTemporaryFile(mode='w+', delete=False, suffix=\".spdx\") as temp_file:\n        temp_file.write(spdx_content)\n        temp_file_name = temp_file.name\n    \n    # Parse the SPDX file\n    document: Document = parse_file(temp_file_name)\n    \n    print(f\"Successfully parsed SPDX document.\")\n    print(f\"  Document Name: {document.name}\")\n    print(f\"  SPDX Version: {document.spdx_version}\")\n    print(f\"  Data License: {document.data_license}\")\n    \nexcept Exception as e:\n    print(f\"An error occurred during parsing: {e}\")\nfinally:\n    # Clean up the temporary file\n    if temp_file_name and os.path.exists(temp_file_name):\n        os.remove(temp_file_name)\n","lang":"python","description":"This quickstart demonstrates how to parse a simple SPDX Tag/Value document from a string using a temporary file. The `parse_file` function is the primary entry point for parsing, capable of handling various SPDX formats.","tag":null,"tag_description":null,"last_tested":"2026-04-25","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-21","installed_version":"0.8.3","pypi_latest":"0.8.5","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.1,"avg_import_s":1,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"spdx-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.85,"mem_mb":16.8,"disk_size":"40.4M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"spdx-tools","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.95,"mem_mb":16.8,"disk_size":"40.4M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"spdx-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.1,"import_time_s":0.63,"mem_mb":16.8,"disk_size":"42M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"spdx-tools","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.62,"mem_mb":16.8,"disk_size":"42M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"spdx-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.28,"mem_mb":17.5,"disk_size":"44.2M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"spdx-tools","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.48,"mem_mb":17.5,"disk_size":"44.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"spdx-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.2,"import_time_s":1.11,"mem_mb":17.5,"disk_size":"45M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"spdx-tools","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.17,"mem_mb":17.5,"disk_size":"45M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"spdx-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.01,"mem_mb":17.3,"disk_size":"35.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"spdx-tools","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.12,"mem_mb":17.3,"disk_size":"35.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"spdx-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":1.04,"mem_mb":17.3,"disk_size":"37M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"spdx-tools","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.16,"mem_mb":17.3,"disk_size":"37M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"spdx-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.98,"mem_mb":17.4,"disk_size":"35.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"spdx-tools","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.13,"mem_mb":17.4,"disk_size":"35.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"spdx-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":1,"mem_mb":17.4,"disk_size":"36M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"spdx-tools","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.16,"mem_mb":17.4,"disk_size":"36M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"spdx-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.79,"mem_mb":16.6,"disk_size":"39.7M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"spdx-tools","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.88,"mem_mb":16.6,"disk_size":"39.7M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"spdx-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.5,"import_time_s":0.73,"mem_mb":16.6,"disk_size":"41M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"spdx-tools","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.82,"mem_mb":16.6,"disk_size":"41M"}]}}