pip(或setuptools,distribute等...)能否列出每个已安装软件包使用的许可证? [英] Can pip (or setuptools, distribute etc...) list the license used by each installed package?

查看:93
本文介绍了pip(或setuptools,distribute等...)能否列出每个已安装软件包使用的许可证?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试审核具有大量依赖关系的Python项目,尽管我可以手动查找每个项目的首页/许可条款,但似乎大多数OSS软件包都应该已经在其元数据中包含了许可名称和版本.

I'm trying to audit a Python project with a large number of dependencies and while I can manually look up each project's homepage/license terms, it seems like most OSS packages should already contain the license name and version in their metadata.

不幸的是,我无法在pip或easy_install中找到任何列出软件包名称和已安装版本(通过pip冻结)的选项.

Unfortunately I can't find any options in pip or easy_install to list more than the package name and installed version (via pip freeze).

是否有人指向列出Python软件包许可证元数据的工具的指针?

Does anyone have pointers to a tool to list license metadata for Python packages?

推荐答案

您可以使用pkg_resources:

import pkg_resources

def get_pkg_license(pkgname):
    """
    Given a package reference (as from requirements.txt),
    return license listed in package metadata.
    NOTE: This function does no error checking and is for
    demonstration purposes only.
    """
    pkgs = pkg_resources.require(pkgname)
    pkg = pkgs[0]
    for line in pkg.get_metadata_lines('PKG-INFO'):
        (k, v) = line.split(': ', 1)
        if k == "License":
            return v
    return None

示例用法:

>>> get_pkg_license('mercurial')
'GNU GPLv2+'
>>> get_pkg_license('pytz')
'MIT'
>>> get_pkg_license('django')
'UNKNOWN'

这篇关于pip(或setuptools,distribute等...)能否列出每个已安装软件包使用的许可证?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆