目录

license-lens

license-lens 是一个不依赖第三方库的 Python 命令行工具,用于检查本地或远程代码库的开源许可证信号。

功能

  • 识别根目录中的 LICENSE、LICENCE、COPYING、NOTICE 和 UNLICENSE 文件;
  • 识别 MIT、BSD、Apache-2.0、GPL、LGPL、MPL 等常见许可证;
  • 扫描源代码和 README 中的 SPDX-License-Identifier;
  • 检查 README 是否说明许可证;
  • 检查是否存在版权声明;
  • 对许可证缺失、许可证无法识别或多个许可证信号并存给出警告;
  • 输出终端文本、Markdown 或 JSON 报告。

远程仓库支持 GitHub、GitLink 等 Git 服务的 HTTPS/SSH 克隆地址,也支持常见的仓库网页地址。扫描远程仓库时,工具会用 git clone --depth 1 将代码放进临时目录,扫描结束后自动清理;报告中保留用户输入的原始仓库地址。

使用方法

在项目根目录执行:

python src/license_lens.py scan examples/demo_project

扫描 GitHub 仓库:

python src/license_lens.py scan https://github.com/psf/requests --ref main

扫描 GitLink 仓库网页地址:

python src/license_lens.py scan https://gitlink.org.cn/WhiteNight/license-lens-23375291 --ref master

扫描远程仓库的指定标签或分支,并增加浅克隆深度:

python src/license_lens.py scan https://github.com/org/project --ref v1.0.0 --depth 5

生成 Markdown 报告:

python src/license_lens.py scan examples/demo_project --format markdown --output reports/demo-report.md

生成 JSON 报告:

python src/license_lens.py scan examples/demo_project --format json --output reports/demo-report.json

如果项目没有许可证文件,工具会返回失败状态;许可证存在但 README 或版权声明不完整时,会返回警告状态。扫描私有仓库时,需要先让本机 Git 配好 HTTPS 令牌或 SSH 凭据;工具不会读取或打印凭据。

运行自动化测试:

python -m unittest discover -s tests -v

当前测试覆盖一个许可证完整的通过样例、一个缺少 LICENSE 的失败样例,以及远程网页地址到 Git 克隆地址的规范化。

示例

仓库中包含两个用于验证的示例:

  • examples/demo_project:包含 MIT License、README 许可证说明和版权声明,预期状态为 PASS;
  • examples/incomplete_project:没有 LICENSE 文件,预期状态为 FAIL。

设计说明

许可证文件是法律文本,工具只做初步识别和提醒,不替代法律审查,也不判断复杂依赖关系的最终许可证兼容性。远程扫描只读取仓库内容,不会向远程仓库写入任何文件。项目使用 Python 标准库实现,避免引入额外依赖,方便在不同环境中运行和复核。

本工具采用 Apache License 2.0。Apache-2.0 属于宽松型许可证,允许他人使用、修改、分发和商业化,同时明确提供专利授权,并要求保留许可证、版权和修改说明。

examples/demo_project 是独立的 MIT 许可证测试样例,其许可证见该目录下的 LICENSE。扫描本仓库时会同时识别 Apache-2.0 和样例中的 MIT,并返回 WARN,提示人工核对多个许可证;这不表示扫描运行失败。

关于
41.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号