首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(或设置工具、分发等)列出每个安装的软件包使用的许可证?

(或设置工具、分发等)列出每个安装的软件包使用的许可证?
EN

Stack Overflow用户
提问于 2013-09-30 03:27:06
回答 12查看 24.6K关注 0票数 46

我试图审计一个具有大量依赖项的Python项目,虽然我可以手动查找每个项目的主页/许可条款,但似乎大多数OSS包都应该已经在其元数据中包含许可证名称和版本。

不幸的是,我在pip或easy_install中找不到比软件包名和安装版本更多的选项(通过pip冻结)。

有人有指向工具的指针来列出Python包的许可元数据吗?

EN

Stack Overflow用户

发布于 2019-04-18 21:33:33

根据pip show -v的输出,每个包的许可信息有两个可能的位置。

下面是一些示例:

代码语言:javascript
运行
复制
$ pip show django -v | grep -i license
License: BSD
  License :: OSI Approved :: BSD License

$ pip show setuptools -v | grep -i license
License: UNKNOWN
  License :: OSI Approved :: MIT License

$ pip show python-dateutil -v | grep -i license
License: Dual License
  License :: OSI Approved :: BSD License
  License :: OSI Approved :: Apache Software License

$ pip show ipdb -v | grep -i license
License: BSD

下面的代码返回一个迭代器,它包含包的所有可能的许可证,使用setuptools

代码语言:javascript
运行
复制
from itertools import chain, compress
from pkg_resources import get_distribution


def filters(line):
    return compress(
        (line[9:], line[39:]),
        (line.startswith('License:'), line.startswith('Classifier: License')),
    )


def get_pkg_license(pkg):
    distribution = get_distribution(pkg)
    try:
        lines = distribution.get_metadata_lines('METADATA')
    except OSError:
        lines = distribution.get_metadata_lines('PKG-INFO')
    return tuple(chain.from_iterable(map(filters, lines)))

以下是研究结果:

代码语言:javascript
运行
复制
>>> tuple(get_pkg_license(get_distribution('django')))
('BSD', 'BSD License')

>>> tuple(get_pkg_license(get_distribution('setuptools')))
('UNKNOWN', 'MIT License')

>>> tuple(get_pkg_license(get_distribution('python-dateutil')))
('Dual License', 'BSD License', 'Apache Software License')

>>> tuple(get_pkg_license(get_distribution('ipdb')))
('BSD',)

最后,要从已安装的应用程序获得所有许可证:

代码语言:javascript
运行
复制
>>> {
        p.project_name: get_pkg_license(p) 
        for p in pkg_resources.working_set
    } 
票数 4
EN
查看全部 12 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19086030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档