SemClone/purl2notices
GitHub: SemClone/purl2notices
从 Package URL 或归档文件自动提取版权与许可证信息,生成可自定义格式的法律声明文档。
Stars: 1 | Forks: 0
# PURL2NOTICES - Package URL 到法律声明生成器
[](https://opensource.org/licenses/Apache-2.0)
[](https://www.python.org/downloads/)
[](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, 依赖分析, 开源合规, 文档结构分析, 无后门, 许可证管理, 逆向工具