Can pip (or setuptools, distribute etc...) list the license used by each installed package? Can pip (or setuptools, distribute etc...) list the license used by each installed package? python python

Can pip (or setuptools, distribute etc...) list the license used by each installed package?


You can use pkg_resources:

import pkg_resourcesdef 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

Example use:

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


Here is a copy-pasteable snippet which will print your packages.

Requires: prettytable (pip install prettytable)

Code

import pkg_resourcesimport prettytabledef get_pkg_license(pkg):    try:        lines = pkg.get_metadata_lines('METADATA')    except:        lines = pkg.get_metadata_lines('PKG-INFO')    for line in lines:        if line.startswith('License:'):            return line[9:]    return '(Licence not found)'def print_packages_and_licenses():    t = prettytable.PrettyTable(['Package', 'License'])    for pkg in sorted(pkg_resources.working_set, key=lambda x: str(x).lower()):        t.add_row((str(pkg), get_pkg_license(pkg)))    print(t)if __name__ == "__main__":    print_packages_and_licenses()

Example Output

+---------------------------+--------------------------------------------------------------+|          Package          |                           License                            |+---------------------------+--------------------------------------------------------------+|       appdirs 1.4.3       |                             MIT                              ||     argon2-cffi 16.3.0    |                             MIT                              ||        boto3 1.4.4        |                      Apache License 2.0                      ||      botocore 1.5.21      |                      Apache License 2.0                      ||        cffi 1.10.0        |                             MIT                              ||       colorama 0.3.9      |                             BSD                              ||      decorator 4.0.11     |                       new BSD License                        ||        Django 1.11        |                             BSD                              ||  django-debug-toolbar 1.7 |                             BSD                              ||    django-environ 0.4.3   |                         MIT License                          ||   django-storages 1.5.2   |                             BSD                              ||    django-uuslug 1.1.8    |                             BSD                              || djangorestframework 3.6.2 |                             BSD                              ||      docutils 0.13.1      | public domain, Python, 2-Clause BSD, GPL 3 (see COPYING.txt) ||     EasyProcess 0.2.3     |                             BSD                              ||       ipython 6.0.0       |                             BSD                              ||   ipython-genutils 0.2.0  |                             BSD                              ||        jedi 0.10.2        |                             MIT                              ||       jmespath 0.9.1      |                             MIT                              ||       packaging 16.8      |              BSD or Apache License, Version 2.0              ||     pickleshare 0.7.4     |                             MIT                              ||         pip 9.0.1         |                             MIT                              ||     prettytable 0.7.2     |                        BSD (3 clause)                        ||   prompt-toolkit 1.0.14   |                           UNKNOWN                            ||       psycopg2 2.6.2      |                 LGPL with exceptions or ZPL                  ||       pycparser 2.17      |                             BSD                              ||       Pygments 2.2.0      |                         BSD License                          ||      pyparsing 2.2.0      |                         MIT License                          ||   python-dateutil 2.6.0   |                        Simplified BSD                        ||    python-slugify 1.2.4   |                             MIT                              ||        pytz 2017.2        |                             MIT                              ||   PyVirtualDisplay 0.2.1  |                             BSD                              ||     s3transfer 0.1.10     |                      Apache License 2.0                      ||       selenium 3.0.2      |                           UNKNOWN                            ||     setuptools 35.0.2     |                           UNKNOWN                            ||    simplegeneric 0.8.1    |                           ZPL 2.1                            ||         six 1.10.0        |                             MIT                              ||       sqlparse 0.2.3      |                             BSD                              ||      traitlets 4.3.2      |                             BSD                              ||      Unidecode 0.4.20     |                             GPL                              ||       wcwidth 0.1.7       |                             MIT                              ||       wheel 0.30.0a0      |                             MIT                              ||  win-unicode-console 0.5  |                             MIT                              |+---------------------------+--------------------------------------------------------------+


Here is a way to do this with yolk3k (Command-line tool for querying PyPI and Python packages installed on your system.)

pip install yolk3kyolk -l -f license#-l lists all installed packages#-f Show specific metadata fields (In this case, License)