SemClone/purl2notices

GitHub: SemClone/purl2notices

从 Package URL 或归档文件自动提取版权与许可证信息,生成可自定义格式的法律声明文档。

Stars: 1 | Forks: 0

# PURL2NOTICES - Package URL 到法律声明生成器 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/) [![PyPI version](https://img.shields.io/pypi/v/purl2notices.svg)](https://pypi.org/project/purl2notices/) 从 Package URL (PURL) 生成全面的法律声明和归属文档。自动从 12 多个生态系统的包中提取版权和许可证信息,生成可自定义的文本和 HTML 输出,用于合规文档。 ## 功能 - **多格式输入**:处理 PURL、归档文件 (JAR/WAR/WHL)、目录和缓存文件 - **12 多个生态系统支持**:NPM、PyPI、Maven、Cargo、Go、NuGet、Conda 等 - **智能许可证检测**:多种引擎(purl2src、upmex、osslili)实现精准提取 - **SEMCL.ONE 集成**:与 src2purl、osslili 和生态系统工具无缝协作 ## 安装说明 ``` pip install purl2notices ``` 用于开发环境: ``` git clone https://github.com/SemClone/purl2notices.git cd purl2notices pip install -e . ``` ## 快速开始 ``` # 为单个 package 生成声明 purl2notices -i pkg:npm/express@4.0.0 # 从文件处理多个 package purl2notices -i packages.txt -o NOTICE.txt # 递归扫描目录 purl2notices -i ./src --recursive -o NOTICE.html -f html ``` ## 使用方法 ### CLI 使用 ``` # 基本声明生成 purl2notices -i pkg:npm/express@4.0.0 -o NOTICE.txt # 处理 JAR/WAR archives purl2notices -i library.jar -o NOTICE.txt # 带缓存的目录扫描 purl2notices -i ./project --recursive --cache project.cache.json -o NOTICE.txt # 合并多个 cache 文件 purl2notices -i cache1.json --merge-cache cache2.json -o combined-NOTICE.txt # 使用自定义 template 的 HTML 输出 purl2notices -i packages.txt -o NOTICE.html -f html --template custom.jinja2 # 应用 license 覆盖 purl2notices -i packages.txt --overrides custom.json -o NOTICE.txt ``` ### Python API ``` from purl2notices import Purl2Notices import asyncio # 初始化 processor processor = Purl2Notices() # 处理单个 package package = asyncio.run(processor.process_single_purl("pkg:npm/express@4.0.0")) # 生成声明 notices = processor.generate_notices([package]) print(notices) # 自定义配置 processor = Purl2Notices( output_format="html", template_path="custom_template.jinja2" ) ``` ## 支持的输入类型 ### Package URL (PURL) ``` # NPM package purl2notices -i pkg:npm/express@4.0.0 # Python package purl2notices -i pkg:pypi/django@4.2.0 # Maven artifact purl2notices -i pkg:maven/org.apache.commons/commons-lang3@3.12.0 # 来自文件的多个 PURL echo "pkg:npm/express@4.0.0" > packages.txt echo "pkg:pypi/django@4.2.0" >> packages.txt purl2notices -i packages.txt ``` ### 归档文件 ``` # Java archive purl2notices -i application.jar purl2notices -i webapp.war # Python wheel purl2notices -i package-1.0.0-py3-none-any.whl # 处理多个 archive purl2notices -i libs/*.jar -o NOTICE.txt ``` ### 目录 ``` # 扫描当前目录 purl2notices -i . -o NOTICE.txt # 使用特定 pattern 进行递归扫描 purl2notices -i ./src --recursive --include "*.py" -o NOTICE.txt # 排除 pattern purl2notices -i ./project --recursive --exclude "test/*" -o NOTICE.txt ``` ### 缓存文件 ``` # 使用 CycloneDX cache purl2notices -i project.cache.json -o NOTICE.txt # 合并多个 cache purl2notices -i cache1.json --merge-cache cache2.json --merge-cache cache3.json ``` ## 输出格式 ### 文本格式(默认) ``` ================================================================================ express 4.0.0 -------------------------------------------------------------------------------- Copyright (c) 2009-2014 TJ Holowaychuk Copyright (c) 2013-2014 Roman Shtylman Copyright (c) 2014-2015 Douglas Christopher Wilson MIT License [Full license text...] ================================================================================ ``` ### HTML 格式 ``` # 使用默认 template 生成 HTML purl2notices -i packages.txt -o NOTICE.html -f html # 使用自定义 Jinja2 template purl2notices -i packages.txt -o NOTICE.html -f html --template custom.jinja2 ``` ## 配置 ### 许可证覆盖 创建一个 JSON 文件以覆盖检测到的许可证: ``` { "pkg:npm/express@4.0.0": { "license": "MIT", "copyright": "Copyright (c) Express Authors" } } ``` 应用覆盖: ``` purl2notices -i packages.txt --overrides overrides.json -o NOTICE.txt ``` ### 自定义模板 为 HTML 输出创建自定义 Jinja2 模板: ``` Legal Notices {% for package in packages %}

{{ package.name }} {{ package.version }}

{{ package.copyright }}

{{ package.license_text }}
{% endfor %} ``` ### 环境变量 ``` # 设置默认输出格式 export PURL2NOTICES_FORMAT=html # 设置默认 template 路径 export PURL2NOTICES_TEMPLATE=/path/to/template.jinja2 # 启用 debug 日志记录 export PURL2NOTICES_DEBUG=true ``` ## 与 SEMCL.ONE 集成 PURL2NOTICES 是 SEMCL.ONE 生态系统的核心组件: - 与 **src2purl** 协作,从源码识别包 - 使用 **osslili** 增强许可证检测 - 与 **upmex** 集成以提取包元数据 - 补充 **ospac** 进行策略合规性评估 - 支持 **purl2src** 进行源码检索 ### 完整工作流示例 ``` # 1. 从源识别 package src2purl ./project > project.purl # 2. 生成法律声明 purl2notices -i project.purl -o NOTICE.txt # 3. 验证 compliance ospac evaluate NOTICE.txt --policy compliance.yaml ``` ## 高级功能 ### 批处理 ``` # 高效处理大型列表 purl2notices -i packages.txt --batch-size 20 --workers 4 -o NOTICE.txt ``` ### 过滤和排除 ``` # 排除特定 package purl2notices -i packages.txt --exclude-purl "pkg:npm/test-*" -o NOTICE.txt # 仅包含特定 license purl2notices -i packages.txt --include-license MIT --include-license Apache-2.0 ``` ### 缓存管理 ``` # 生成 cache 以供日后使用 purl2notices -i ./project --recursive --cache-only -o project.cache.json # 更新现有 cache purl2notices -i new-packages.txt --update-cache project.cache.json # 清除 cache purl2notices --clear-cache ``` ## 文档 - [用户指南](docs/user-guide.md) - 全面的使用文档 - [示例](docs/examples.md) - 详细的示例和用例 - [配置](docs/configuration.md) - 配置选项和自定义 ## 支持 获取支持和提问: - [GitHub Issues](https://github.com/SemClone/purl2notices/issues) - Bug 报告和功能请求 - [文档](https://github.com/SemClone/purl2notices) - 完整的项目文档 - [SEMCL.ONE 社区](https://semcl.one) - 生态系统支持和讨论 ## 许可证 Apache License 2.0 - 详见 [LICENSE](LICENSE) 文件。 ## 作者 贡献者列表请参阅 [AUTHORS.md](AUTHORS.md)。 *SEMCL.ONE [生态系统](https://semcl.one)的一部分,用于全面的 OSS 合规和代码分析。*
标签:Python, WebSocket, 依赖分析, 开源合规, 文档结构分析, 无后门, 许可证管理, 逆向工具