一个强大的开源许可证分析工具,专为GitHub仓库设计,支持复杂场景下的许可证识别和合规审查。
- 智能许可证识别: 自动识别GitHub仓库的主许可证类型(SPDX标准)
- 双重许可证检测: 识别并分析双重许可证关系(AND/OR)
- 第三方组件分析: 发现和定位第三方依赖许可证信息
- 版权声明提取: 自动提取或构造版权声明
- 多URL支持: 处理GitHub URL和包管理器URL(npm、PyPI、NuGet、Go模块)
- 版本解析: 支持特定版本分析和默认分支回退
- 冲突检测: 识别README与License文件中的许可证不一致
- LLM智能分析: 集成Gemini API进行自然语言理解
- 模糊许可证文本处理: 识别非标准许可证声明
- 上下文理解: 理解复杂的许可证关系表达
- 异步并发处理: 支持高效的批量分析
- 完善的日志系统: 详细的分析过程记录
- 错误恢复机制: 自动重试和故障处理
- 代理支持: 适应企业网络环境
- Python 3.13+
- GitHub API Token
- Gemini API Key(用于LLM分析)
- 网络连接(支持代理配置)
创建 .env 文件并配置必要的环境变量:
# 必需配置
GITHUB_TOKEN=your_github_token_here
GEMINI_API_KEY=your_gemini_api_key_here
# 可选配置
USE_LLM=true # 启用/禁用LLM分析
HTTP_PROXY=http://127.0.0.1:7897 # HTTP代理配置
HTTPS_PROXY=http://127.0.0.1:7897 # HTTPS代理配置
DASHSCOPE_API_KEY=your_qwen_api_key # 备用LLM配置# 使用 uv 安装(推荐)
uv sync
# 或使用 pip 安装
pip install -e .创建 input.xlsx 文件,包含以下列:
github_url: GitHub仓库URL或包管理器URLversion: (可选)指定分析的版本name: (可选)组件名称
python main.py分析结果将保存在 outputs/ 目录下:
output_latest.xlsx: 最新分析结果output_YYYY-MM-DD_HH-MM-SS.xlsx: 带时间戳的结果文件temp/: 中间结果和备份文件
本工具支持多种类型的URL输入:
https://github.com/owner/repo
https://github.com/owner/repo/tree/branch
https://github.com/owner/repo/tree/tag
https://github.com/owner/repo/blob/branch/path/to/file
# NPM
https://www.npmjs.com/package/package-name
npm://package-name
# PyPI
https://pypi.org/project/package-name/
pypi://package-name
# NuGet
https://www.nuget.org/packages/PackageName/
nuget://PackageName
# Go模块
https://pkg.go.dev/module-path
go://module-path
系统采用15步渐进式分析流程:
- URL验证: 检查URL有效性和GitHub仓库可访问性
- URL解析: 提取仓库所有者、名称和路径信息
- 仓库信息获取: 获取仓库基本信息和默认分支
- 版本解析: 将指定版本解析为具体的commit/tag/branch
- GitHub API许可证检查: 尝试通过GitHub API直接获取许可证信息
- 仓库树结构分析: 获取完整的仓库文件结构
- README分析: 搜索并分析README文件中的许可证信息
- License文件搜索: 在指定路径中搜索许可证文件
- 许可证内容分析: 使用LLM分析许可证文件内容
- 版权声明提取: 从许可证文件和README中提取版权信息
- 许可证冲突检测: 比较README和许可证文件中的许可证信息
- 仓库级搜索: 在整个仓库中搜索许可证文件
- 仓库级许可证检查: 检查仓库级别的许可证信息
- 第三方许可证检测: 识别和定位第三方组件许可证
- 最终分析汇总: 整合所有信息,生成综合分析结果
分析结果包含以下关键字段:
input_url: 原始输入URLrepo_url: GitHub仓库URLcomponent_name: 组件/仓库名称input_version: 请求的版本resolved_version: 实际分析的版本used_default_branch: 是否使用了默认分支
concluded_license: 综合判定的最终许可证license_type: 主许可证类型(SPDX标识符)license_files: 找到的许可证文件URL列表readme_license: README中发现的许可证license_file_license: 许可证文件中的许可证has_license_conflict: 是否存在许可证冲突
is_dual_licensed: 是否为双重许可证dual_license_relationship: 双重许可证关系(AND/OR/none)
has_third_party_licenses: 是否包含第三方许可证third_party_license_location: 第三方许可证位置thirdparty_dirs: 第三方目录列表
copyright_notice: 提取的版权声明license_analysis: 详细的许可证分析结果license_determination_reason: 许可证判定理由status: 分析状态(success/error/skipped)error: 错误信息(如果有)
系统能够理解和分析复杂的双重许可证声明:
"Licensed under MIT OR Apache-2.0"→ OR 关系"Dual licensed under MIT and Apache-2.0"→ AND 关系"Available under either MIT or BSD-3-Clause"→ OR 关系
智能识别和定位第三方组件的许可证信息:
- 自动发现
LICENSE-THIRD-PARTY文件 - 识别
third-party/,vendor/,dependencies/目录 - 分析README中的依赖部分
- 识别常见的第三方关键词
自动提取和构造版权声明:
- 从许可证文件中提取现有版权声明
- 从 README 文件中提取版权信息
- 自动构造版权声明(如果未找到):
- 使用仓库创建/更新年份
- 包含组件名称
- 添加通用版权语句
- 异步并发: 默认支持20个并发任务
- 智能限流: 自动处理GitHub API速率限制
- 断点续传: 定期保存中间结果,支持故障恢复
- 进度追踪: 实时显示处理进度
- 自动重试: 对于网络错误和API限制自动重试
- 代理回退: 代理失败时自动尝试直连
- 友好错误处理: 详细的错误信息和解决建议
- 部分失败容忍: 单个仓库失败不影响整体进程
系统生成多个分类日志文件:
logs/github_license_analyzer.log: 主程序日志logs/url_construction.log: URL处理和解析详情logs/llm_interaction.log: LLM交互详情和响应logs/substep.log: 分步骤执行详情logs/repository_trees.log: 仓库结构信息
在 core/config.py 中可以调整:
MAX_CONCURRENCY: 最大并发数(默认20)SCORE_THRESHOLD: 模糊匹配阈值(默认65)THIRD_PARTY_KEYWORDS: 第三方目录关键词
在 prompts.yaml 中自定义LLM提示词:
license_analysis: 许可证分析提示词version_resolve: 版本解析提示词copyright_extract: 版权提取提示词github_url_finder: GitHub URL查找提示词
A: 系统自动检测并处理GitHub API速率限制,会等待限制重置后自动继续。
A: 在 .env 文件中配置 HTTP_PROXY 和 HTTPS_PROXY 即可。
A: 在 .env 文件中设置 USE_LLM=false。
A: 系统支持并发处理和进度追踪,大型仓库会需要更长时间。
- Fork 项目仓库
- 创建功能分支:
git checkout -b feature/new-feature - 提交更改:
git commit -am 'Add new feature' - 推送分支:
git push origin feature/new-feature - 创建 Pull Request
本项目采用 Apache License 2.0 许可证。
如果遇到问题或有功能建议,请:
- 查看日志文件了解详细错误信息
- 在 GitHub Issues 中提交问题报告
- 提供输入数据和错误日志以便复现问题
此工具专为开源许可证合规审查设计,适用于法务人员、合规工程师和软件供应链安全分析人员。