
许可证合规工具,用于检测Python PyPI包的许可证名称和类型,支持多种格式的依赖文件(Python、Clojure、JavaScript、iOS、Android等),能够识别公共领域、许可型、copyleft等各类开源许可证,帮助开发团队确保项目依赖的许可证合规性,降低***风险。
requirements.txt(检测许可证名称和类型)覆盖各类免费/自由和开源许可证:
支持排除特定包、自定义报告格式、设置失败条件(如检测到copyleft许可证时返回非零退出码)等。
I. Docker
1. 拉取官方镜像(推荐)
从https://hub.docker.com/r/pilosus/pip-license-checker/%E6%8B%89%E5%8F%96%EF%BC%9A
bashdocker pull pilosus/pip-license-checker
可指定版本标签(如0.41.0)或使用latest。
2. 自行构建镜像
bashgit clone https://github.com/pilosus/pip-license-checker.git cd pip-license-checker docker build -t pilosus/pip-license-checker .
II. 其他安装方式(可选)
基本用法(检查Python包)
直接指定Python包名及版本范围:
bashdocker run -it --rm pilosus/pip-license-checker \ java -jar app.jar 'aiostream==0.4.3' 'pygit2' 'aiohttp>3.7.1'
检查本地文件(挂载主机目录)
需检查本地文件(如requirements.txt)时,使用-v挂载主机目录至容器内/volume:
bashdocker run -v `pwd`:/volume \ -e GITHUB_TOKEN=your-gh-token \ # 可选,用于提高GitHub API速率限制 -it --rm pilosus/pip-license-checker \ java -jar app.jar \ --exclude 'pylint.*' \ # 排除匹配正则的包 --requirements '/volume/requirements.txt' \ # Python需求文件 --external '/volume/licenses.csv' \ # 外部许可证文件 --fail StrongCopyleft \ # 检测到StrongCopyleft时失败 --fails-only \ # 仅显示失败项 --verbose # 详细输出
以下示例基于源码编译的lein run,独立jar包替换为java -jar pip-license-checker-[version]-standalone.jar。
查看帮助信息
bashlein run
检查单个Python包
bashlein run piny==0.6.0 # 指定版本 lein run aiostream # 最新稳定版
检查requirements.txt文件
bashlein run --requirements resources/requirements.txt
输出示例:
aiohttp:3.7.2 Apache Software License Permissive piny:0.6.0 MIT License Permissive aiostream:0.4.3 GPLv3 StrongCopyleft mo-collections:4.30.21121 Mozilla Public License 2.0 (MPL 2.0) WeakCopyleft ...
排除特定包
排除名称匹配aio.*的包:
bashlein run --requirements resources/requirements.txt --exclude 'aio.*'
生成JSON报告
bashlein run --requirements resources/requirements.txt --report-format json-pretty --totals
| 选项 | 描述 | 示例 |
|---|---|---|
-v, --verbose | 详细程度:error(-v)、info(-vv)、debug(-vvv) | -vv |
-r, --requirements FILE | Python需求文件路径 | --requirements req.txt |
-x, --external FILE | 外部许可证文件路径 | --external licenses.csv |
--external-format FORMAT | 外部文件格式:csv/cocoapods/gradle | --external-format cocoapods |
--fail TYPE | 许可证类型检测失败条件 | --fail StrongCopyleft |
--exclude REGEX | 排除包名匹配的正则 | --exclude 'aio.*' |
--report-format FORMAT | 报告格式:stdout/json/csv | --report-format json-pretty |
--github-token TOKEN | GitHub令牌(提高API速率) | --github-token ghp_xxx |
| 类型 | 说明 | 示例许可证 |
|---|---|---|
| NetworkCopyleft | 网络copyleft | GNU Affero GPL |
| StrongCopyleft | 强copyleft | GNU GPL |
| WeakCopyleft | 弱copyleft | MPL、EPL |
| Copyleft | 所有copyleft类型 | - |
| Permissive | 许可型 | MIT、BSD |
| Other | 未识别/专有 | 自定义EULA |
| Error | 许可证未找到 | - |
CSV格式
默认跳过表头,包名列索引0,许可证名列索引1,可通过--external-options自定义:
bashlein run -x data.csv --external-options '{:skip-header false :package-column-index 1}'
CocoaPods格式(iOS)
指定外部格式为cocoapods:
bashlein run -x Pods-Acknowledgements.plist --external-format cocoapods
Gradle格式(Android)
指定外部格式为gradle:
bashlein run -x licenses.json --external-format gradle
Q1: 是否考虑Python包版本?许可证变更如何处理?
工具会解析包版本(类似pip),并仅检查解析版本的许可证。
Q2: 如何检查所有依赖(含传递依赖)?
工具仅检查显式依赖,可通过pip freeze生成完整依赖列表:
bashpip freeze > all-reqs.txt && lein run -r all-reqs.txt
Q3: 是否支持PEP-508的extras和markers?
不支持,需通过Q2方法生成实际安装的依赖列表。
工具按"原样"提供,不保证信息准确性,不构成***建议,不对使用造成的损害负责。
Copyright © 2020-2025 Vitaly Samigullin
基于Eclipse Public License 2.0或GPL-2.0 WITH Classpath-exception-2.0许可。SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务