pip-licenses


Namepip-licenses JSON
Version 4.4.0 PyPI version JSON
download
home_pagehttps://github.com/raimon49/pip-licenses
SummaryDump the software license list of Python packages installed with pip.
upload_time2024-03-28 15:21:44
maintainerNone
docs_urlNone
authorraimon
requires_python~=3.8
licenseMIT
keywords pip pypi package license check
VCS
bugtrack_url
requirements prettytable wcwidth
Travis-CI No Travis.
coveralls test coverage
            pip-licenses
============

|Build Status| |PyPI - Python Version| |PyPI version| |GitHub Release|
|Codecov| |GitHub contributors| |BSD License| |PyPI - Downloads|

Dump the software license list of Python packages installed with pip.

Table of Contents
-----------------

-  `Description <#description>`__
-  `Installation <#installation>`__
-  `Usage <#usage>`__
-  `Command-Line Options <#command-line-options>`__

   -  `Common options <#common-options>`__

      -  `Option: python <#option-python>`__
      -  `Option: from <#option-from>`__
      -  `Option: order <#option-order>`__
      -  `Option: format <#option-format>`__

         -  `Markdown <#markdown>`__
         -  `reST <#rest>`__
         -  `Confluence <#confluence>`__
         -  `HTML <#html>`__
         -  `JSON <#json>`__
         -  `JSON LicenseFinder <#json-licensefinder>`__
         -  `CSV <#csv>`__
         -  `Plain Vertical <#plain-vertical>`__

      -  `Option: summary <#option-summary>`__
      -  `Option: output-file <#option-output-file>`__
      -  `Option: ignore-packages <#option-ignore-packages>`__
      -  `Option: packages <#option-packages>`__

   -  `Format options <#format-options>`__

      -  `Option: with-system <#option-with-system>`__
      -  `Option: with-authors <#option-with-authors>`__
      -  `Option: with-maintainers <#option-with-maintainers>`__
      -  `Option: with-urls <#option-with-urls>`__
      -  `Option: with-description <#option-with-description>`__
      -  `Option: no-version <#option-no-version>`__
      -  `Option: with-license-file <#option-with-license-file>`__
      -  `Option: filter-strings <#option-filter-strings>`__
      -  `Option: filter-code-page <#option-filter-code-page>`__

   -  `Verify options <#verify-options>`__

      -  `Option: fail-on <#option-fail-on>`__
      -  `Option: allow-only <#option-allow-only>`__
      -  `Option: partial-match <#option-partial-match>`__

   -  `More Information <#more-information>`__

-  `Dockerfile <#dockerfile>`__
-  `About UnicodeEncodeError <#about-unicodeencodeerror>`__
-  `License <#license>`__

   -  `Dependencies <#dependencies>`__

-  `Uninstallation <#uninstallation>`__
-  `Contributing <#contributing>`__

Description
-----------

``pip-licenses`` is a CLI tool for checking the software license of
installed Python packages with pip.

Implemented with the idea inspired by ``composer licenses`` command in
Composer (a.k.a PHP package management tool).

https://getcomposer.org/doc/03-cli.md#licenses

Installation
------------

Install it via PyPI using ``pip`` command.

.. code:: bash

   # Install or Upgrade to newest available version
   $ pip install -U pip-licenses

   # If upgrading from pip-licenses 3.x, remove PTable
   $ pip uninstall -y PTable

**Note for Python 3.7 users:** pip-licenses 4.x discontinued support
earlier than the Python 3.7 EOL schedule. If you want to use it with
Python 3.7, install pip-licenses 3.x.

.. code:: bash

   # Using old version for the Python 3.7 environment
   $ pip install 'pip-licenses<4.0'

**Note:** If you are still using Python 2.7, install version less than
2.0. No new features will be provided for version 1.x.

.. code:: bash

   $ pip install 'pip-licenses<2.0'

Usage
-----

Execute the command with your venv (or virtualenv) environment.

.. code:: bash

   # Install packages in your venv environment
   (venv) $ pip install Django pip-licenses

   # Check the licenses with your venv environment
   (venv) $ pip-licenses
    Name    Version  License
    Django  2.0.2    BSD
    pytz    2017.3   MIT

Command-Line Options
--------------------

Common options
~~~~~~~~~~~~~~

Option: python
^^^^^^^^^^^^^^

By default, this tools finds the packages from the environment
pip-licenses is launched from, by searching in current python's
``sys.path`` folders. In the case you want to search for packages in an
other environment (e.g. if you want to run pip-licenses from its own
isolated environment), you can specify a path to a python executable.
The packages will be searched for in the given python's ``sys.path``,
free of pip-licenses dependencies.

.. code:: bash

   (venv) $ pip-licenses --with-system | grep pip
    pip                       22.3.1       MIT License
    pip-licenses              4.1.0        MIT License

.. code:: bash

   (venv) $ pip-licenses --python=</path/to/other/env>/bin/python --with-system | grep pip
    pip                       23.0.1       MIT License 

Option: from
^^^^^^^^^^^^

By default, this tool finds the license from `Trove
Classifiers <https://pypi.org/classifiers/>`__ or package Metadata. Some
Python packages declare their license only in Trove Classifiers.

(See also): `Set license to MIT in setup.py by alisianoi ・ Pull Request
#1058 ・
pypa/setuptools <https://github.com/pypa/setuptools/pull/1058>`__, `PEP
314#License <https://www.python.org/dev/peps/pep-0314/#license>`__

For example, even if you check with the ``pip show`` command, the
license is displayed as ``UNKNOWN``.

.. code:: bash

   (venv) $ pip show setuptools
   Name: setuptools
   Version: 38.5.0
   Summary: Easily download, build, install, upgrade, and uninstall Python packages
   Home-page: https://github.com/pypa/setuptools
   Author: Python Packaging Authority
   Author-email: distutils-sig@python.org
   License: UNKNOWN

The mixed mode (``--from=mixed``) of this tool works well and looks for
licenses.

.. code:: bash

   (venv) $ pip-licenses --from=mixed --with-system | grep setuptools
    setuptools    38.5.0   MIT License

In mixed mode, it first tries to look for licenses in the Trove
Classifiers. When not found in the Trove Classifiers, the license
declared in Metadata is displayed.

If you want to look only in metadata, use ``--from=meta``. If you want
to look only in Trove Classifiers, use ``--from=classifier``.

To list license information from both metadata and classifier, use
``--from=all``.

**Note:** If neither can find license information, please check with the
``with-authors`` and ``with-urls`` options and contact the software
author.

-  The ``m`` keyword is prepared as alias of ``meta``.
-  The ``c`` keyword is prepared as alias of ``classifier``.
-  The ``mix`` keyword is prepared as alias of ``mixed``.

   -  Default behavior in this tool

Option: order
^^^^^^^^^^^^^

By default, it is ordered by package name.

If you give arguments to the ``--order`` option, you can output in other
sorted order.

.. code:: bash

   (venv) $ pip-licenses --order=license

Option: format
^^^^^^^^^^^^^^

By default, it is output to the ``plain`` format.

Markdown
''''''''

When executed with the ``--format=markdown`` option, you can output list
in markdown format. The ``m`` ``md`` keyword is prepared as alias of
``markdown``.

.. code:: bash

   (venv) $ pip-licenses --format=markdown
   | Name   | Version | License |
   |--------|---------|---------|
   | Django | 2.0.2   | BSD     |
   | pytz   | 2017.3  | MIT     |

When inserted in a markdown document, it is rendered as follows:

====== ======= =======
Name   Version License
====== ======= =======
Django 2.0.2   BSD
pytz   2017.3  MIT
====== ======= =======

reST
''''

When executed with the ``--format=rst`` option, you can output list in
"`Grid
tables <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#grid-tables>`__"
of reStructuredText format. The ``r`` ``rest`` keyword is prepared as
alias of ``rst``.

.. code:: bash

   (venv) $ pip-licenses --format=rst
   +--------+---------+---------+
   | Name   | Version | License |
   +--------+---------+---------+
   | Django | 2.0.2   | BSD     |
   +--------+---------+---------+
   | pytz   | 2017.3  | MIT     |
   +--------+---------+---------+

Confluence
''''''''''

When executed with the ``--format=confluence`` option, you can output
list in `Confluence (or JIRA) Wiki
markup <https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html#ConfluenceWikiMarkup-Tables>`__
format. The ``c`` keyword is prepared as alias of ``confluence``.

.. code:: bash

   (venv) $ pip-licenses --format=confluence
   | Name   | Version | License |
   | Django | 2.0.2   | BSD     |
   | pytz   | 2017.3  | MIT     |

HTML
''''

When executed with the ``--format=html`` option, you can output list in
HTML table format. The ``h`` keyword is prepared as alias of ``html``.

.. code:: bash

   (venv) $ pip-licenses --format=html
   <table>
       <tr>
           <th>Name</th>
           <th>Version</th>
           <th>License</th>
       </tr>
       <tr>
           <td>Django</td>
           <td>2.0.2</td>
           <td>BSD</td>
       </tr>
       <tr>
           <td>pytz</td>
           <td>2017.3</td>
           <td>MIT</td>
       </tr>
   </table>

JSON
''''

When executed with the ``--format=json`` option, you can output list in
JSON format easily allowing post-processing. The ``j`` keyword is
prepared as alias of ``json``.

.. code:: json

   [
     {
       "Author": "Django Software Foundation",
       "License": "BSD",
       "Name": "Django",
       "URL": "https://www.djangoproject.com/",
       "Version": "2.0.2"
     },
     {
       "Author": "Stuart Bishop",
       "License": "MIT",
       "Name": "pytz",
       "URL": "http://pythonhosted.org/pytz",
       "Version": "2017.3"
     }
   ]

JSON LicenseFinder
''''''''''''''''''

When executed with the ``--format=json-license-finder`` option, you can
output list in JSON format that is identical to
`LicenseFinder <https://github.com/pivotal/LicenseFinder>`__. The
``jlf`` keyword is prepared as alias of ``jlf``. This makes pip-licenses
a drop-in replacement for LicenseFinder.

.. code:: json

   [
     {
       "licenses": ["BSD"],
       "name": "Django",
       "version": "2.0.2"
     },
     {
       "licenses": ["MIT"],
       "name": "pytz",
       "version": "2017.3"
     }
   ]

CSV
'''

When executed with the ``--format=csv`` option, you can output list in
quoted CSV format. Useful when you want to copy/paste the output to an
Excel sheet.

.. code:: bash

   (venv) $ pip-licenses --format=csv
   "Name","Version","License"
   "Django","2.0.2","BSD"
   "pytz","2017.3","MIT"

Plain Vertical
''''''''''''''

When executed with the ``--format=plain-vertical`` option, you can
output a simple plain vertical output that is similar to Angular CLI's
`--extractLicenses flag <https://angular.io/cli/build#options>`__. This
format minimizes rightward drift.

.. code:: bash

   (venv) $ pip-licenses --format=plain-vertical --with-license-file --no-license-path
   pytest
   5.3.4
   MIT license
   The MIT License (MIT)

   Copyright (c) 2004-2020 Holger Krekel and others

   Permission is hereby granted, free of charge, to any person obtaining a copy of
   this software and associated documentation files (the "Software"), to deal in
   the Software without restriction, including without limitation the rights to
   use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
   of the Software, and to permit persons to whom the Software is furnished to do
   so, subject to the following conditions:

   The above copyright notice and this permission notice shall be included in all
   copies or substantial portions of the Software.

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
   SOFTWARE.

Option: summary
^^^^^^^^^^^^^^^

When executed with the ``--summary`` option, you can output a summary of
each license.

.. code:: bash

   (venv) $ pip-licenses --summary --from=classifier --with-system
    Count  License
    2      BSD License
    4      MIT License

**Note:** When using this option, only ``--order=count`` or
``--order=license`` has an effect for the ``--order`` option. And using
``--with-authors`` and ``--with-urls`` will be ignored.

Option: output-file
^^^^^^^^^^^^^^^^^^^

When executed with the ``--output-file`` option, write the result to the
path specified by the argument.

::

   (venv) $ pip-licenses --format=rst --output-file=/tmp/output.rst
   created path: /tmp/output.rst

Option: ignore-packages
^^^^^^^^^^^^^^^^^^^^^^^

When executed with the ``--ignore-packages`` option, ignore the package
specified by argument from list output.

.. code:: bash

   (venv) $ pip-licenses --ignore-packages django
    Name  Version  License
    pytz  2017.3   MIT

Package names of arguments can be separated by spaces.

.. code:: bash

   (venv) $ pip-licenses --with-system --ignore-packages django pip pip-licenses
    Name        Version  License
    prettytable 3.5.0    BSD License
    pytz        2017.3   MIT
    setuptools  38.5.0   UNKNOWN
    wcwidth     0.2.5    MIT License

Packages can also be specified with a version, only ignoring that
specific version.

.. code:: bash

   (venv) $ pip-licenses --with-system --ignore-packages django pytz:2017.3
    Name        Version  License
    prettytable 3.5.0    BSD License
    setuptools  38.5.0   UNKNOWN
    wcwidth     0.2.5    MIT License

Option: packages
^^^^^^^^^^^^^^^^

When executed with the ``packages`` option, look at the package
specified by argument from list output.

.. code:: bash

   (venv) $ pip-licenses --packages django
    Name   Version  License
    Django 2.0.2    BSD

Package names of arguments can be separated by spaces.

.. code:: bash

   (venv) $ pip-licenses --with-system --packages prettytable pytz
    Name        Version  License
    prettytable 3.5.0    BSD License
    pytz        2017.3   MIT

Format options
~~~~~~~~~~~~~~

Option: with-system
^^^^^^^^^^^^^^^^^^^

By default, system packages such as ``pip`` and ``setuptools`` are
ignored.

And ``pip-licenses`` and the implicit dependency ``prettytable`` and
``wcwidth`` will also be ignored.

If you want to output all including system package, use the
``--with-system`` option.

.. code:: bash

   (venv) $ pip-licenses --with-system
    Name          Version  License
    Django        2.0.2    BSD
    pip           9.0.1    MIT
    pip-licenses  1.0.0    MIT License
    prettytable   3.5.0    BSD License
    pytz          2017.3   MIT
    setuptools    38.5.0   UNKNOWN
    wcwidth       0.2.5    MIT License

Option: with-authors
^^^^^^^^^^^^^^^^^^^^

When executed with the ``--with-authors`` option, output with author of
the package.

.. code:: bash

   (venv) $ pip-licenses --with-authors
    Name    Version  License  Author
    Django  2.0.2    BSD      Django Software Foundation
    pytz    2017.3   MIT      Stuart Bishop

Option: with-maintainers
^^^^^^^^^^^^^^^^^^^^^^^^

When executed with the ``--with-maintainers`` option, output with
maintainer of the package.

**Note:** This option is available for users who want information about
the maintainer as well as the author. See
`#144 <https://github.com/raimon49/pip-licenses/issues/144>`__

Option: with-urls
^^^^^^^^^^^^^^^^^

For packages without Metadata, the license is output as ``UNKNOWN``. To
get more package information, use the ``--with-urls`` option.

.. code:: bash

   (venv) $ pip-licenses --with-urls
    Name    Version  License  URL
    Django  2.0.2    BSD      https://www.djangoproject.com/
    pytz    2017.3   MIT      http://pythonhosted.org/pytz

Option: with-description
^^^^^^^^^^^^^^^^^^^^^^^^

When executed with the ``--with-description`` option, output with short
description of the package.

.. code:: bash

   (venv) $ pip-licenses --with-description
    Name    Version  License  Description
    Django  2.0.2    BSD      A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
    pytz    2017.3   MIT      World timezone definitions, modern and historical

Option: no-version
^^^^^^^^^^^^^^^^^^

When executed with the ``--no-version`` option, output without the
version number.

.. code:: bash

   (venv) $ pip-licenses --no-version
    Name    License
    Django  BSD
    pytz    MIT

Option: with-license-file
^^^^^^^^^^^^^^^^^^^^^^^^^

When executed with the ``--with-license-file`` option, output the
location of the package's license file on disk and the full contents of
that file. Due to the length of these fields, this option is best paired
with ``--format=json``.

If you also want to output the file ``NOTICE`` distributed under Apache
License etc., specify the ``--with-notice-file`` option additionally.

**Note:** If you want to keep the license file path secret, specify
``--no-license-path`` option together.

Option: filter-strings
^^^^^^^^^^^^^^^^^^^^^^

Some package data contains Unicode characters which might cause problems
for certain output formats (in particular ReST tables). If this filter
is enabled, all characters which cannot be encoded with a given code
page (see ``--filter-code-page``) will be removed from any input strings
(e.g. package name, description).

Option: filter-code-page
^^^^^^^^^^^^^^^^^^^^^^^^

If the input strings are filtered (see ``--filter-strings``), you can
specify the applied code page (default ``latin-1``). A list of all
available code pages can be found `codecs module
document <https://docs.python.org/3/library/codecs.html#standard-encodings>`__.

Verify options
~~~~~~~~~~~~~~

Option: fail-on
^^^^^^^^^^^^^^^

Fail (exit with code 1) on the first occurrence of the licenses of the
semicolon-separated list. The license name matching is case-insensitive.

If ``--from=all``, the option will apply to the metadata license field.

.. code:: bash

   (venv) $ pip-licenses --fail-on="MIT License;BSD License"

**Note:** Packages with multiple licenses will fail if at least one
license is included in the fail-on list. For example:

::

   # keyring library has 2 licenses
   $ pip-licenses --package keyring
    Name     Version  License
    keyring  23.0.1   MIT License; Python Software Foundation License

   # If just "Python Software Foundation License" is specified, it will fail.
   $ pip-licenses --package keyring --fail-on="Python Software Foundation License;"
   $ echo $?
   1

   # Matching is case-insensitive. Following check will fail:
   $ pip-licenses --fail-on="mit license"

Option: allow-only
^^^^^^^^^^^^^^^^^^

Fail (exit with code 1) if none of the package licenses are in the
semicolon-separated list. The license name matching is case-insensitive.

If ``--from=all``, the option will apply to the metadata license field.

.. code:: bash

   (venv) $ pip-licenses --allow-only="MIT License;BSD License"

**Note:** Packages with multiple licenses will only be allowed if at
least one license is included in the allow-only list. For example:

::

   # keyring library has 2 licenses
   $ pip-licenses --package keyring
    Name     Version  License
    keyring  23.0.1   MIT License; Python Software Foundation License

   # One or both licenses must be specified (order and case does not matter). Following checks will pass:
   $ pip-licenses --package keyring --allow-only="MIT License"
   $ pip-licenses --package keyring --allow-only="mit License"
   $ pip-licenses --package keyring --allow-only="BSD License;MIT License"
   $ pip-licenses --package keyring --allow-only="Python Software Foundation License"
   $ pip-licenses --package keyring --allow-only="Python Software Foundation License;MIT License"

   # If none of the license in the allow list match, the check will fail.
   $ pip-licenses --package keyring  --allow-only="BSD License"
   $ echo $?
   1

Option: partial-match
^^^^^^^^^^^^^^^^^^^^^

If set, enables partial (substring) matching for ``--fail-on`` or
``--allow-only``. Default is unset (False).

Usage:

.. code:: bash

   (venv) $ pip-licenses --partial-match --allow-only="MIT License;BSD License"
   (venv) $ pip-licenses --partial-match --fail-on="MIT License;BSD License"

**Note:** Semantics are the same as with ``--fail-on`` or
``--allow-only``. This only enables substring matching.

::

   # keyring library has 2 licenses
   $ pip-licenses --package keyring
    Name     Version  License
    keyring  23.0.1   MIT License; Python Software Foundation License

   # One or both licenses must be specified (order and case does not matter). Following checks will pass:
   $ pip-licenses --package keyring --allow-only="MIT License"
   $ pip-licenses --package keyring --allow-only="mit License"
   $ pip-licenses --package keyring --allow-only="BSD License;MIT License"
   $ pip-licenses --package keyring --allow-only="Python Software Foundation License"
   $ pip-licenses --package keyring --allow-only="Python Software Foundation License;MIT License"

   # These won't pass, as they're not a full match against one of the licenses
   $ pip-licenses --package keyring --allow-only="MIT"
   $ echo $?
   1
   $ pip-licenses --package keyring --allow-only="mit"
   $ echo $?
   1

   # with --partial-match, they pass
   $ pip-licenses --package keyring --partial-match --allow-only="MIT"
   $ echo $?
   0
   $ pip-licenses --package keyring --partial-match --allow-only="mit"
   $ echo $?
   0

More Information
~~~~~~~~~~~~~~~~

Other, please make sure to execute the ``--help`` option.

Dockerfile
----------

You can check the package license used by your app in the isolated
Docker environment.

.. code:: bash

   # Clone this repository to local
   $ git clone https://github.com/raimon49/pip-licenses.git
   $ cd pip-licenses

   # Create your app's requirements.txt file
   # Other ways, pip freeze > docker/requirements.txt
   $ echo "Flask" > docker/requirements.txt

   # Build docker image
   $ docker build . -t myapp-licenses

   # Check the package license in container
   $ docker run --rm myapp-licenses
    Name          Version  License
    Click         7.0      BSD License
    Flask         1.0.2    BSD License
    Jinja2        2.10     BSD License
    MarkupSafe    1.1.1    BSD License
    Werkzeug      0.15.2   BSD License
    itsdangerous  1.1.0    BSD License

   # Check with options
   $ docker run --rm myapp-licenses --summary
    Count  License
    4      BSD
    2      BSD-3-Clause

   # When you need help
   $ docker run --rm myapp-licenses --help

**Note:** This Docker image can not check package licenses with C and C
++ Extensions. It only works with pure Python package dependencies.

If you want to resolve build environment issues, try using not slim
image and more.

.. code:: diff

   diff --git a/Dockerfile b/Dockerfile
   index bfc4edc..175e968 100644
   --- a/Dockerfile
   +++ b/Dockerfile
   @@ -1,4 +1,4 @@
   -FROM python:3.11-slim-bullseye
   +FROM python:3.11-bullseye

About UnicodeEncodeError
------------------------

If a ``UnicodeEncodeError`` occurs, check your environment variables
``LANG`` and ``LC_TYPE``. Additionally, you can set ``PYTHONIOENCODING``
to override the encoding used for ``stdout``.

Often occurs in isolated environments such as Docker and tox.

See useful reports:

-  `#35 <https://github.com/raimon49/pip-licenses/issues/35>`__
-  `#45 <https://github.com/raimon49/pip-licenses/issues/45>`__

License
-------

`MIT
License <https://github.com/raimon49/pip-licenses/blob/master/LICENSE>`__

Dependencies
~~~~~~~~~~~~

-  `prettytable <https://pypi.org/project/prettytable/>`__ by Luke
   Maurits and maintainer of fork version Jazzband team under the
   BSD-3-Clause License

   -  **Note:** This package implicitly requires
      `wcwidth <https://pypi.org/project/wcwidth/>`__.

``pip-licenses`` has been implemented in the policy to minimize the
dependence on external package.

Uninstallation
--------------

Uninstall package and dependent package with ``pip`` command.

.. code:: bash

   $ pip uninstall pip-licenses prettytable wcwidth

Contributing
------------

See `contribution
guidelines <https://github.com/raimon49/pip-licenses/blob/master/CONTRIBUTING.md>`__.

.. |Build Status| image:: https://github.com/raimon49/pip-licenses/workflows/Python%20package/badge.svg
   :target: https://github.com/raimon49/pip-licenses/actions?query=workflow%3A%22Python+package%22
.. |PyPI - Python Version| image:: https://img.shields.io/pypi/pyversions/pip-licenses.svg
   :target: https://pypi.org/project/pip-licenses/
.. |PyPI version| image:: https://badge.fury.io/py/pip-licenses.svg
   :target: https://badge.fury.io/py/pip-licenses
.. |GitHub Release| image:: https://img.shields.io/github/release/raimon49/pip-licenses.svg
   :target: https://github.com/raimon49/pip-licenses/releases
.. |Codecov| image:: https://codecov.io/gh/raimon49/pip-licenses/branch/master/graph/badge.svg
   :target: https://codecov.io/gh/raimon49/pip-licenses
.. |GitHub contributors| image:: https://img.shields.io/github/contributors/raimon49/pip-licenses
   :target: https://github.com/raimon49/pip-licenses/graphs/contributors
.. |BSD License| image:: http://img.shields.io/badge/license-MIT-green.svg
   :target: https://github.com/raimon49/pip-licenses/blob/master/LICENSE
.. |PyPI - Downloads| image:: https://img.shields.io/pypi/dm/pip-licenses
   :target: https://pypistats.org/packages/pip-licenses


CHANGELOG
---------

.. _440:

4.4.0
~~~~~

-  Implement new option ``--partial-match``

.. _434:

4.3.4
~~~~~

-  Maintain to pass test with wcwidth>=0.2.10

.. _433:

4.3.3
~~~~~

-  Always terminate ``--allow-only`` and ``--fail-on`` messages with a
   newline
-  Always terminate files created with ``--output-file`` with a newline

.. _432:

4.3.2
~~~~~

-  Better handling extracting URLs from ``Project-URL``

.. _431:

4.3.1
~~~~~

-  Fix to treat package names as normalized as in `PEP
   503 <https://peps.python.org/pep-0503/>`__ with ``--packages`` and
   ``--ignore-packages`` option

.. _430:

4.3.0
~~~~~

-  Implement new option ``--no-version``

.. _420:

4.2.0
~~~~~

-  Implement new option ``--with-maintainers``
-  Implement new option ``--python``
-  Allow version spec in ``--ignore-packages`` parameters
-  When the ``Author`` field is ``UNKNOWN``, the output is automatically
   completed from ``Author-email``
-  When the ``home-page`` field is ``UNKNOWN``, the output is
   automatically completed from ``Project-URL``

.. _410:

4.1.0
~~~~~

-  Support case-insensitive license name matching around ``--fail-on``
   and ``--allow-only`` parameters

.. _403:

4.0.3
~~~~~

-  Escape unicode output (to e.g. ``&#123;``) in the html output

.. _402:

4.0.2
~~~~~

-  Add type annotations and code formatter

.. _401:

4.0.1
~~~~~

-  Fix "pip-licenses" is missing in output of
   ``pip-licenses --with-system`` option

.. _400:

4.0.0
~~~~~

-  Support for Python 3.11
-  Dropped support Python 3.7
-  Migrate Docker base image from Alpine to Debian 11-slim
-  Breaking changes

   -  Does not work with PTable and depends on prettytable
   -  Depend on importlib_metadata rather than pip

.. _355:

3.5.5
~~~~~

-  Search for path defined in `PEP
   639 <https://peps.python.org/pep-0639/>`__ with
   ``--with-license-file`` option
-  Dropped support Python 3.6

.. _354:

3.5.4
~~~~~

-  Skip directories when detecting license files

.. _353:

3.5.3
~~~~~

-  Support pip 21.3 or later

.. _352:

3.5.2
~~~~~

-  Ignore spaces around ``--fail-on`` and ``--allow-only`` parameters

.. _351:

3.5.1
~~~~~

-  Fix the order in which multiple licenses are output

.. _350:

3.5.0
~~~~~

-  Handle multiple licenses better with options ``--fail-on`` and
   ``--allow-only``
-  Small change in output method for multiple licenses, change the
   separator from comma to semicolon

   -  Up to 3.4.0: ``Python Software Foundation License, MIT License``
   -  3.5.0 or later:
      ``Python Software Foundation License; MIT License``

.. _340:

3.4.0
~~~~~

-  Implement new option ``--packages``

.. _331:

3.3.1
~~~~~

-  Fix license summary refer to ``--from`` option

.. _330:

3.3.0
~~~~~

-  Improves the readability of the help command

.. _320:

3.2.0
~~~~~

-  Implement new option ``--from=all``
-  Change license notation under `SPDX license
   identifier <https://spdx.org/licenses/>`__ style

.. _310:

3.1.0
~~~~~

-  Implement new option for use in continuous integration

   -  ``--fail-on``
   -  ``--allow-only``

.. _300:

3.0.0
~~~~~

-  Dropped support Python 3.5
-  Clarified support for Python 3.9
-  Migrate package metadata to ``setup.cfg``
-  Breaking changes

   -  Change default behavior to ``--from=mixed``

.. _230:

2.3.0
~~~~~

-  Implement new option for manage unicode characters

   -  ``--filter-strings``
   -  ``--filter-code-page``

.. _221:

2.2.1
~~~~~

-  Fixed the file that is selected when multiple matches are made with
   ``LICENSE*`` with run ``--with-license-file``

.. _220:

2.2.0
~~~~~

-  Implement new option ``--with-notice-file``
-  Added to find British style file name ``LICENCE`` with run
   ``--with-license-file``

.. _211:

2.1.1
~~~~~

-  Suppress errors when opening license files

.. _210:

2.1.0
~~~~~

-  Implement new option ``--format=plain-vertical``
-  Support for outputting license file named ``COPYING *``

.. _201:

2.0.1
~~~~~

-  Better license file open handling in Python 3

.. _200:

2.0.0
~~~~~

-  Dropped support Python 2.7
-  Breaking changes

   -  Removed migration path to obsolete options

      -  ``--from-classifier``
      -  ``--format-markdown``
      -  ``--format-rst``
      -  ``--format-confluence``
      -  ``--format-html``
      -  ``--format-json``

-  Implement new option ``--no-license-path``

.. _1180:

1.18.0
~~~~~~

-  Supports compatibility to work with either PTable or prettytable

.. _1170:

1.17.0
~~~~~~

-  Implement new option ``--output-file``
-  Clarified support for Python 3.8

.. _1161:

1.16.1
~~~~~~

-  Add a help text for ``--format=json-license-finder`` option

.. _1160:

1.16.0
~~~~~~

-  Implement new option ``--format=json-license-finder``

.. _1152:

1.15.2
~~~~~~

-  Read license file works well with Windows

.. _1151:

1.15.1
~~~~~~

-  Skip parsing of license file for packages specified with
   ``--ignore-packages`` option

.. _1150:

1.15.0
~~~~~~

-  Implement new option ``--format=csv``

.. _1140:

1.14.0
~~~~~~

-  Implement new option ``--from=mixed`` as a mixed mode

.. _1130:

1.13.0
~~~~~~

-  Implement new option ``--from=meta``, ``from=classifier``
-  Dropped support Python 3.4

.. _1121:

1.12.1
~~~~~~

-  Fix bug

   -  Change warning output to standard error

.. _1120:

1.12.0
~~~~~~

-  Supports execution within Docker container
-  Warning of deprecated options
-  Fix bug

   -  Ignore ``OSI Approved`` string with multiple licenses

.. _1110:

1.11.0
~~~~~~

-  Implement new option ``--with-license-file``

.. _1100:

1.10.0
~~~~~~

-  Implement new option ``--with-description``

.. _190:

1.9.0
~~~~~

-  Implement new option ``--summary``

.. _180:

1.8.0
~~~~~

-  Implement new option ``--format-json``
-  Dropped support Python 3.3

.. _171:

1.7.1
~~~~~

-  Fix bug

   -  Support pip 10.x

.. _170:

1.7.0
~~~~~

-  Implement new option ``--format-confluence``

.. _161:

1.6.1
~~~~~

-  Fix bug

   -  Support display multiple license with ``--from-classifier`` option

-  Improve document

   -  Add section of 'Uninstallation' in README

.. _160:

1.6.0
~~~~~

-  Implement new option ``--format-html``

.. _150:

1.5.0
~~~~~

-  Implement new option ``--format-rst``

.. _140:

1.4.0
~~~~~

-  Implement new option ``--format-markdown``
-  Include LICENSE file in distribution package

.. _130:

1.3.0
~~~~~

-  Implement new option ``--ignore-packages``

.. _120:

1.2.0
~~~~~

-  Implement new option ``--from-classifier``

.. _110:

1.1.0
~~~~~

-  Improve document

   -  Add ToC to README document
   -  Add a information of dependencies

.. _100:

1.0.0
~~~~~

-  First stable release version

.. _020:

0.2.0
~~~~~

-  Implement new option ``--order``

   -  Default behavior is ``--order=name``

.. _010:

0.1.0
~~~~~

-  First implementation version

   -  Support options

      -  ``--with-system``
      -  ``--with-authors``
      -  ``--with-urls``



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/raimon49/pip-licenses",
    "name": "pip-licenses",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "~=3.8",
    "maintainer_email": null,
    "keywords": "pip pypi package license check",
    "author": "raimon",
    "author_email": "raimon49@hotmail.com",
    "download_url": "https://files.pythonhosted.org/packages/25/8c/709a3c6bd12194a818d0465896fe6070ae5a45d14eb98e7410d98d85f647/pip-licenses-4.4.0.tar.gz",
    "platform": null,
    "description": "pip-licenses\n============\n\n|Build Status| |PyPI - Python Version| |PyPI version| |GitHub Release|\n|Codecov| |GitHub contributors| |BSD License| |PyPI - Downloads|\n\nDump the software license list of Python packages installed with pip.\n\nTable of Contents\n-----------------\n\n-  `Description <#description>`__\n-  `Installation <#installation>`__\n-  `Usage <#usage>`__\n-  `Command-Line Options <#command-line-options>`__\n\n   -  `Common options <#common-options>`__\n\n      -  `Option: python <#option-python>`__\n      -  `Option: from <#option-from>`__\n      -  `Option: order <#option-order>`__\n      -  `Option: format <#option-format>`__\n\n         -  `Markdown <#markdown>`__\n         -  `reST <#rest>`__\n         -  `Confluence <#confluence>`__\n         -  `HTML <#html>`__\n         -  `JSON <#json>`__\n         -  `JSON LicenseFinder <#json-licensefinder>`__\n         -  `CSV <#csv>`__\n         -  `Plain Vertical <#plain-vertical>`__\n\n      -  `Option: summary <#option-summary>`__\n      -  `Option: output-file <#option-output-file>`__\n      -  `Option: ignore-packages <#option-ignore-packages>`__\n      -  `Option: packages <#option-packages>`__\n\n   -  `Format options <#format-options>`__\n\n      -  `Option: with-system <#option-with-system>`__\n      -  `Option: with-authors <#option-with-authors>`__\n      -  `Option: with-maintainers <#option-with-maintainers>`__\n      -  `Option: with-urls <#option-with-urls>`__\n      -  `Option: with-description <#option-with-description>`__\n      -  `Option: no-version <#option-no-version>`__\n      -  `Option: with-license-file <#option-with-license-file>`__\n      -  `Option: filter-strings <#option-filter-strings>`__\n      -  `Option: filter-code-page <#option-filter-code-page>`__\n\n   -  `Verify options <#verify-options>`__\n\n      -  `Option: fail-on <#option-fail-on>`__\n      -  `Option: allow-only <#option-allow-only>`__\n      -  `Option: partial-match <#option-partial-match>`__\n\n   -  `More Information <#more-information>`__\n\n-  `Dockerfile <#dockerfile>`__\n-  `About UnicodeEncodeError <#about-unicodeencodeerror>`__\n-  `License <#license>`__\n\n   -  `Dependencies <#dependencies>`__\n\n-  `Uninstallation <#uninstallation>`__\n-  `Contributing <#contributing>`__\n\nDescription\n-----------\n\n``pip-licenses`` is a CLI tool for checking the software license of\ninstalled Python packages with pip.\n\nImplemented with the idea inspired by ``composer licenses`` command in\nComposer (a.k.a PHP package management tool).\n\nhttps://getcomposer.org/doc/03-cli.md#licenses\n\nInstallation\n------------\n\nInstall it via PyPI using ``pip`` command.\n\n.. code:: bash\n\n   # Install or Upgrade to newest available version\n   $ pip install -U pip-licenses\n\n   # If upgrading from pip-licenses 3.x, remove PTable\n   $ pip uninstall -y PTable\n\n**Note for Python 3.7 users:** pip-licenses 4.x discontinued support\nearlier than the Python 3.7 EOL schedule. If you want to use it with\nPython 3.7, install pip-licenses 3.x.\n\n.. code:: bash\n\n   # Using old version for the Python 3.7 environment\n   $ pip install 'pip-licenses<4.0'\n\n**Note:** If you are still using Python 2.7, install version less than\n2.0. No new features will be provided for version 1.x.\n\n.. code:: bash\n\n   $ pip install 'pip-licenses<2.0'\n\nUsage\n-----\n\nExecute the command with your venv (or virtualenv) environment.\n\n.. code:: bash\n\n   # Install packages in your venv environment\n   (venv) $ pip install Django pip-licenses\n\n   # Check the licenses with your venv environment\n   (venv) $ pip-licenses\n    Name    Version  License\n    Django  2.0.2    BSD\n    pytz    2017.3   MIT\n\nCommand-Line Options\n--------------------\n\nCommon options\n~~~~~~~~~~~~~~\n\nOption: python\n^^^^^^^^^^^^^^\n\nBy default, this tools finds the packages from the environment\npip-licenses is launched from, by searching in current python's\n``sys.path`` folders. In the case you want to search for packages in an\nother environment (e.g. if you want to run pip-licenses from its own\nisolated environment), you can specify a path to a python executable.\nThe packages will be searched for in the given python's ``sys.path``,\nfree of pip-licenses dependencies.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --with-system | grep pip\n    pip                       22.3.1       MIT License\n    pip-licenses              4.1.0        MIT License\n\n.. code:: bash\n\n   (venv) $ pip-licenses --python=</path/to/other/env>/bin/python --with-system | grep pip\n    pip                       23.0.1       MIT License \n\nOption: from\n^^^^^^^^^^^^\n\nBy default, this tool finds the license from `Trove\nClassifiers <https://pypi.org/classifiers/>`__ or package Metadata. Some\nPython packages declare their license only in Trove Classifiers.\n\n(See also): `Set license to MIT in setup.py by alisianoi \u30fb Pull Request\n#1058 \u30fb\npypa/setuptools <https://github.com/pypa/setuptools/pull/1058>`__, `PEP\n314#License <https://www.python.org/dev/peps/pep-0314/#license>`__\n\nFor example, even if you check with the ``pip show`` command, the\nlicense is displayed as ``UNKNOWN``.\n\n.. code:: bash\n\n   (venv) $ pip show setuptools\n   Name: setuptools\n   Version: 38.5.0\n   Summary: Easily download, build, install, upgrade, and uninstall Python packages\n   Home-page: https://github.com/pypa/setuptools\n   Author: Python Packaging Authority\n   Author-email: distutils-sig@python.org\n   License: UNKNOWN\n\nThe mixed mode (``--from=mixed``) of this tool works well and looks for\nlicenses.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --from=mixed --with-system | grep setuptools\n    setuptools    38.5.0   MIT License\n\nIn mixed mode, it first tries to look for licenses in the Trove\nClassifiers. When not found in the Trove Classifiers, the license\ndeclared in Metadata is displayed.\n\nIf you want to look only in metadata, use ``--from=meta``. If you want\nto look only in Trove Classifiers, use ``--from=classifier``.\n\nTo list license information from both metadata and classifier, use\n``--from=all``.\n\n**Note:** If neither can find license information, please check with the\n``with-authors`` and ``with-urls`` options and contact the software\nauthor.\n\n-  The ``m`` keyword is prepared as alias of ``meta``.\n-  The ``c`` keyword is prepared as alias of ``classifier``.\n-  The ``mix`` keyword is prepared as alias of ``mixed``.\n\n   -  Default behavior in this tool\n\nOption: order\n^^^^^^^^^^^^^\n\nBy default, it is ordered by package name.\n\nIf you give arguments to the ``--order`` option, you can output in other\nsorted order.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --order=license\n\nOption: format\n^^^^^^^^^^^^^^\n\nBy default, it is output to the ``plain`` format.\n\nMarkdown\n''''''''\n\nWhen executed with the ``--format=markdown`` option, you can output list\nin markdown format. The ``m`` ``md`` keyword is prepared as alias of\n``markdown``.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --format=markdown\n   | Name   | Version | License |\n   |--------|---------|---------|\n   | Django | 2.0.2   | BSD     |\n   | pytz   | 2017.3  | MIT     |\n\nWhen inserted in a markdown document, it is rendered as follows:\n\n====== ======= =======\nName   Version License\n====== ======= =======\nDjango 2.0.2   BSD\npytz   2017.3  MIT\n====== ======= =======\n\nreST\n''''\n\nWhen executed with the ``--format=rst`` option, you can output list in\n\"`Grid\ntables <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#grid-tables>`__\"\nof reStructuredText format. The ``r`` ``rest`` keyword is prepared as\nalias of ``rst``.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --format=rst\n   +--------+---------+---------+\n   | Name   | Version | License |\n   +--------+---------+---------+\n   | Django | 2.0.2   | BSD     |\n   +--------+---------+---------+\n   | pytz   | 2017.3  | MIT     |\n   +--------+---------+---------+\n\nConfluence\n''''''''''\n\nWhen executed with the ``--format=confluence`` option, you can output\nlist in `Confluence (or JIRA) Wiki\nmarkup <https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html#ConfluenceWikiMarkup-Tables>`__\nformat. The ``c`` keyword is prepared as alias of ``confluence``.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --format=confluence\n   | Name   | Version | License |\n   | Django | 2.0.2   | BSD     |\n   | pytz   | 2017.3  | MIT     |\n\nHTML\n''''\n\nWhen executed with the ``--format=html`` option, you can output list in\nHTML table format. The ``h`` keyword is prepared as alias of ``html``.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --format=html\n   <table>\n       <tr>\n           <th>Name</th>\n           <th>Version</th>\n           <th>License</th>\n       </tr>\n       <tr>\n           <td>Django</td>\n           <td>2.0.2</td>\n           <td>BSD</td>\n       </tr>\n       <tr>\n           <td>pytz</td>\n           <td>2017.3</td>\n           <td>MIT</td>\n       </tr>\n   </table>\n\nJSON\n''''\n\nWhen executed with the ``--format=json`` option, you can output list in\nJSON format easily allowing post-processing. The ``j`` keyword is\nprepared as alias of ``json``.\n\n.. code:: json\n\n   [\n     {\n       \"Author\": \"Django Software Foundation\",\n       \"License\": \"BSD\",\n       \"Name\": \"Django\",\n       \"URL\": \"https://www.djangoproject.com/\",\n       \"Version\": \"2.0.2\"\n     },\n     {\n       \"Author\": \"Stuart Bishop\",\n       \"License\": \"MIT\",\n       \"Name\": \"pytz\",\n       \"URL\": \"http://pythonhosted.org/pytz\",\n       \"Version\": \"2017.3\"\n     }\n   ]\n\nJSON LicenseFinder\n''''''''''''''''''\n\nWhen executed with the ``--format=json-license-finder`` option, you can\noutput list in JSON format that is identical to\n`LicenseFinder <https://github.com/pivotal/LicenseFinder>`__. The\n``jlf`` keyword is prepared as alias of ``jlf``. This makes pip-licenses\na drop-in replacement for LicenseFinder.\n\n.. code:: json\n\n   [\n     {\n       \"licenses\": [\"BSD\"],\n       \"name\": \"Django\",\n       \"version\": \"2.0.2\"\n     },\n     {\n       \"licenses\": [\"MIT\"],\n       \"name\": \"pytz\",\n       \"version\": \"2017.3\"\n     }\n   ]\n\nCSV\n'''\n\nWhen executed with the ``--format=csv`` option, you can output list in\nquoted CSV format. Useful when you want to copy/paste the output to an\nExcel sheet.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --format=csv\n   \"Name\",\"Version\",\"License\"\n   \"Django\",\"2.0.2\",\"BSD\"\n   \"pytz\",\"2017.3\",\"MIT\"\n\nPlain Vertical\n''''''''''''''\n\nWhen executed with the ``--format=plain-vertical`` option, you can\noutput a simple plain vertical output that is similar to Angular CLI's\n`--extractLicenses flag <https://angular.io/cli/build#options>`__. This\nformat minimizes rightward drift.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --format=plain-vertical --with-license-file --no-license-path\n   pytest\n   5.3.4\n   MIT license\n   The MIT License (MIT)\n\n   Copyright (c) 2004-2020 Holger Krekel and others\n\n   Permission is hereby granted, free of charge, to any person obtaining a copy of\n   this software and associated documentation files (the \"Software\"), to deal in\n   the Software without restriction, including without limitation the rights to\n   use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n   of the Software, and to permit persons to whom the Software is furnished to do\n   so, subject to the following conditions:\n\n   The above copyright notice and this permission notice shall be included in all\n   copies or substantial portions of the Software.\n\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n   SOFTWARE.\n\nOption: summary\n^^^^^^^^^^^^^^^\n\nWhen executed with the ``--summary`` option, you can output a summary of\neach license.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --summary --from=classifier --with-system\n    Count  License\n    2      BSD License\n    4      MIT License\n\n**Note:** When using this option, only ``--order=count`` or\n``--order=license`` has an effect for the ``--order`` option. And using\n``--with-authors`` and ``--with-urls`` will be ignored.\n\nOption: output-file\n^^^^^^^^^^^^^^^^^^^\n\nWhen executed with the ``--output-file`` option, write the result to the\npath specified by the argument.\n\n::\n\n   (venv) $ pip-licenses --format=rst --output-file=/tmp/output.rst\n   created path: /tmp/output.rst\n\nOption: ignore-packages\n^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen executed with the ``--ignore-packages`` option, ignore the package\nspecified by argument from list output.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --ignore-packages django\n    Name  Version  License\n    pytz  2017.3   MIT\n\nPackage names of arguments can be separated by spaces.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --with-system --ignore-packages django pip pip-licenses\n    Name        Version  License\n    prettytable 3.5.0    BSD License\n    pytz        2017.3   MIT\n    setuptools  38.5.0   UNKNOWN\n    wcwidth     0.2.5    MIT License\n\nPackages can also be specified with a version, only ignoring that\nspecific version.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --with-system --ignore-packages django pytz:2017.3\n    Name        Version  License\n    prettytable 3.5.0    BSD License\n    setuptools  38.5.0   UNKNOWN\n    wcwidth     0.2.5    MIT License\n\nOption: packages\n^^^^^^^^^^^^^^^^\n\nWhen executed with the ``packages`` option, look at the package\nspecified by argument from list output.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --packages django\n    Name   Version  License\n    Django 2.0.2    BSD\n\nPackage names of arguments can be separated by spaces.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --with-system --packages prettytable pytz\n    Name        Version  License\n    prettytable 3.5.0    BSD License\n    pytz        2017.3   MIT\n\nFormat options\n~~~~~~~~~~~~~~\n\nOption: with-system\n^^^^^^^^^^^^^^^^^^^\n\nBy default, system packages such as ``pip`` and ``setuptools`` are\nignored.\n\nAnd ``pip-licenses`` and the implicit dependency ``prettytable`` and\n``wcwidth`` will also be ignored.\n\nIf you want to output all including system package, use the\n``--with-system`` option.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --with-system\n    Name          Version  License\n    Django        2.0.2    BSD\n    pip           9.0.1    MIT\n    pip-licenses  1.0.0    MIT License\n    prettytable   3.5.0    BSD License\n    pytz          2017.3   MIT\n    setuptools    38.5.0   UNKNOWN\n    wcwidth       0.2.5    MIT License\n\nOption: with-authors\n^^^^^^^^^^^^^^^^^^^^\n\nWhen executed with the ``--with-authors`` option, output with author of\nthe package.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --with-authors\n    Name    Version  License  Author\n    Django  2.0.2    BSD      Django Software Foundation\n    pytz    2017.3   MIT      Stuart Bishop\n\nOption: with-maintainers\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen executed with the ``--with-maintainers`` option, output with\nmaintainer of the package.\n\n**Note:** This option is available for users who want information about\nthe maintainer as well as the author. See\n`#144 <https://github.com/raimon49/pip-licenses/issues/144>`__\n\nOption: with-urls\n^^^^^^^^^^^^^^^^^\n\nFor packages without Metadata, the license is output as ``UNKNOWN``. To\nget more package information, use the ``--with-urls`` option.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --with-urls\n    Name    Version  License  URL\n    Django  2.0.2    BSD      https://www.djangoproject.com/\n    pytz    2017.3   MIT      http://pythonhosted.org/pytz\n\nOption: with-description\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen executed with the ``--with-description`` option, output with short\ndescription of the package.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --with-description\n    Name    Version  License  Description\n    Django  2.0.2    BSD      A high-level Python Web framework that encourages rapid development and clean, pragmatic design.\n    pytz    2017.3   MIT      World timezone definitions, modern and historical\n\nOption: no-version\n^^^^^^^^^^^^^^^^^^\n\nWhen executed with the ``--no-version`` option, output without the\nversion number.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --no-version\n    Name    License\n    Django  BSD\n    pytz    MIT\n\nOption: with-license-file\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen executed with the ``--with-license-file`` option, output the\nlocation of the package's license file on disk and the full contents of\nthat file. Due to the length of these fields, this option is best paired\nwith ``--format=json``.\n\nIf you also want to output the file ``NOTICE`` distributed under Apache\nLicense etc., specify the ``--with-notice-file`` option additionally.\n\n**Note:** If you want to keep the license file path secret, specify\n``--no-license-path`` option together.\n\nOption: filter-strings\n^^^^^^^^^^^^^^^^^^^^^^\n\nSome package data contains Unicode characters which might cause problems\nfor certain output formats (in particular ReST tables). If this filter\nis enabled, all characters which cannot be encoded with a given code\npage (see ``--filter-code-page``) will be removed from any input strings\n(e.g. package name, description).\n\nOption: filter-code-page\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nIf the input strings are filtered (see ``--filter-strings``), you can\nspecify the applied code page (default ``latin-1``). A list of all\navailable code pages can be found `codecs module\ndocument <https://docs.python.org/3/library/codecs.html#standard-encodings>`__.\n\nVerify options\n~~~~~~~~~~~~~~\n\nOption: fail-on\n^^^^^^^^^^^^^^^\n\nFail (exit with code 1) on the first occurrence of the licenses of the\nsemicolon-separated list. The license name matching is case-insensitive.\n\nIf ``--from=all``, the option will apply to the metadata license field.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --fail-on=\"MIT License;BSD License\"\n\n**Note:** Packages with multiple licenses will fail if at least one\nlicense is included in the fail-on list. For example:\n\n::\n\n   # keyring library has 2 licenses\n   $ pip-licenses --package keyring\n    Name     Version  License\n    keyring  23.0.1   MIT License; Python Software Foundation License\n\n   # If just \"Python Software Foundation License\" is specified, it will fail.\n   $ pip-licenses --package keyring --fail-on=\"Python Software Foundation License;\"\n   $ echo $?\n   1\n\n   # Matching is case-insensitive. Following check will fail:\n   $ pip-licenses --fail-on=\"mit license\"\n\nOption: allow-only\n^^^^^^^^^^^^^^^^^^\n\nFail (exit with code 1) if none of the package licenses are in the\nsemicolon-separated list. The license name matching is case-insensitive.\n\nIf ``--from=all``, the option will apply to the metadata license field.\n\n.. code:: bash\n\n   (venv) $ pip-licenses --allow-only=\"MIT License;BSD License\"\n\n**Note:** Packages with multiple licenses will only be allowed if at\nleast one license is included in the allow-only list. For example:\n\n::\n\n   # keyring library has 2 licenses\n   $ pip-licenses --package keyring\n    Name     Version  License\n    keyring  23.0.1   MIT License; Python Software Foundation License\n\n   # One or both licenses must be specified (order and case does not matter). Following checks will pass:\n   $ pip-licenses --package keyring --allow-only=\"MIT License\"\n   $ pip-licenses --package keyring --allow-only=\"mit License\"\n   $ pip-licenses --package keyring --allow-only=\"BSD License;MIT License\"\n   $ pip-licenses --package keyring --allow-only=\"Python Software Foundation License\"\n   $ pip-licenses --package keyring --allow-only=\"Python Software Foundation License;MIT License\"\n\n   # If none of the license in the allow list match, the check will fail.\n   $ pip-licenses --package keyring  --allow-only=\"BSD License\"\n   $ echo $?\n   1\n\nOption: partial-match\n^^^^^^^^^^^^^^^^^^^^^\n\nIf set, enables partial (substring) matching for ``--fail-on`` or\n``--allow-only``. Default is unset (False).\n\nUsage:\n\n.. code:: bash\n\n   (venv) $ pip-licenses --partial-match --allow-only=\"MIT License;BSD License\"\n   (venv) $ pip-licenses --partial-match --fail-on=\"MIT License;BSD License\"\n\n**Note:** Semantics are the same as with ``--fail-on`` or\n``--allow-only``. This only enables substring matching.\n\n::\n\n   # keyring library has 2 licenses\n   $ pip-licenses --package keyring\n    Name     Version  License\n    keyring  23.0.1   MIT License; Python Software Foundation License\n\n   # One or both licenses must be specified (order and case does not matter). Following checks will pass:\n   $ pip-licenses --package keyring --allow-only=\"MIT License\"\n   $ pip-licenses --package keyring --allow-only=\"mit License\"\n   $ pip-licenses --package keyring --allow-only=\"BSD License;MIT License\"\n   $ pip-licenses --package keyring --allow-only=\"Python Software Foundation License\"\n   $ pip-licenses --package keyring --allow-only=\"Python Software Foundation License;MIT License\"\n\n   # These won't pass, as they're not a full match against one of the licenses\n   $ pip-licenses --package keyring --allow-only=\"MIT\"\n   $ echo $?\n   1\n   $ pip-licenses --package keyring --allow-only=\"mit\"\n   $ echo $?\n   1\n\n   # with --partial-match, they pass\n   $ pip-licenses --package keyring --partial-match --allow-only=\"MIT\"\n   $ echo $?\n   0\n   $ pip-licenses --package keyring --partial-match --allow-only=\"mit\"\n   $ echo $?\n   0\n\nMore Information\n~~~~~~~~~~~~~~~~\n\nOther, please make sure to execute the ``--help`` option.\n\nDockerfile\n----------\n\nYou can check the package license used by your app in the isolated\nDocker environment.\n\n.. code:: bash\n\n   # Clone this repository to local\n   $ git clone https://github.com/raimon49/pip-licenses.git\n   $ cd pip-licenses\n\n   # Create your app's requirements.txt file\n   # Other ways, pip freeze > docker/requirements.txt\n   $ echo \"Flask\" > docker/requirements.txt\n\n   # Build docker image\n   $ docker build . -t myapp-licenses\n\n   # Check the package license in container\n   $ docker run --rm myapp-licenses\n    Name          Version  License\n    Click         7.0      BSD License\n    Flask         1.0.2    BSD License\n    Jinja2        2.10     BSD License\n    MarkupSafe    1.1.1    BSD License\n    Werkzeug      0.15.2   BSD License\n    itsdangerous  1.1.0    BSD License\n\n   # Check with options\n   $ docker run --rm myapp-licenses --summary\n    Count  License\n    4      BSD\n    2      BSD-3-Clause\n\n   # When you need help\n   $ docker run --rm myapp-licenses --help\n\n**Note:** This Docker image can not check package licenses with C and C\n++ Extensions. It only works with pure Python package dependencies.\n\nIf you want to resolve build environment issues, try using not slim\nimage and more.\n\n.. code:: diff\n\n   diff --git a/Dockerfile b/Dockerfile\n   index bfc4edc..175e968 100644\n   --- a/Dockerfile\n   +++ b/Dockerfile\n   @@ -1,4 +1,4 @@\n   -FROM python:3.11-slim-bullseye\n   +FROM python:3.11-bullseye\n\nAbout UnicodeEncodeError\n------------------------\n\nIf a ``UnicodeEncodeError`` occurs, check your environment variables\n``LANG`` and ``LC_TYPE``. Additionally, you can set ``PYTHONIOENCODING``\nto override the encoding used for ``stdout``.\n\nOften occurs in isolated environments such as Docker and tox.\n\nSee useful reports:\n\n-  `#35 <https://github.com/raimon49/pip-licenses/issues/35>`__\n-  `#45 <https://github.com/raimon49/pip-licenses/issues/45>`__\n\nLicense\n-------\n\n`MIT\nLicense <https://github.com/raimon49/pip-licenses/blob/master/LICENSE>`__\n\nDependencies\n~~~~~~~~~~~~\n\n-  `prettytable <https://pypi.org/project/prettytable/>`__ by Luke\n   Maurits and maintainer of fork version Jazzband team under the\n   BSD-3-Clause License\n\n   -  **Note:** This package implicitly requires\n      `wcwidth <https://pypi.org/project/wcwidth/>`__.\n\n``pip-licenses`` has been implemented in the policy to minimize the\ndependence on external package.\n\nUninstallation\n--------------\n\nUninstall package and dependent package with ``pip`` command.\n\n.. code:: bash\n\n   $ pip uninstall pip-licenses prettytable wcwidth\n\nContributing\n------------\n\nSee `contribution\nguidelines <https://github.com/raimon49/pip-licenses/blob/master/CONTRIBUTING.md>`__.\n\n.. |Build Status| image:: https://github.com/raimon49/pip-licenses/workflows/Python%20package/badge.svg\n   :target: https://github.com/raimon49/pip-licenses/actions?query=workflow%3A%22Python+package%22\n.. |PyPI - Python Version| image:: https://img.shields.io/pypi/pyversions/pip-licenses.svg\n   :target: https://pypi.org/project/pip-licenses/\n.. |PyPI version| image:: https://badge.fury.io/py/pip-licenses.svg\n   :target: https://badge.fury.io/py/pip-licenses\n.. |GitHub Release| image:: https://img.shields.io/github/release/raimon49/pip-licenses.svg\n   :target: https://github.com/raimon49/pip-licenses/releases\n.. |Codecov| image:: https://codecov.io/gh/raimon49/pip-licenses/branch/master/graph/badge.svg\n   :target: https://codecov.io/gh/raimon49/pip-licenses\n.. |GitHub contributors| image:: https://img.shields.io/github/contributors/raimon49/pip-licenses\n   :target: https://github.com/raimon49/pip-licenses/graphs/contributors\n.. |BSD License| image:: http://img.shields.io/badge/license-MIT-green.svg\n   :target: https://github.com/raimon49/pip-licenses/blob/master/LICENSE\n.. |PyPI - Downloads| image:: https://img.shields.io/pypi/dm/pip-licenses\n   :target: https://pypistats.org/packages/pip-licenses\n\n\nCHANGELOG\n---------\n\n.. _440:\n\n4.4.0\n~~~~~\n\n-  Implement new option ``--partial-match``\n\n.. _434:\n\n4.3.4\n~~~~~\n\n-  Maintain to pass test with wcwidth>=0.2.10\n\n.. _433:\n\n4.3.3\n~~~~~\n\n-  Always terminate ``--allow-only`` and ``--fail-on`` messages with a\n   newline\n-  Always terminate files created with ``--output-file`` with a newline\n\n.. _432:\n\n4.3.2\n~~~~~\n\n-  Better handling extracting URLs from ``Project-URL``\n\n.. _431:\n\n4.3.1\n~~~~~\n\n-  Fix to treat package names as normalized as in `PEP\n   503 <https://peps.python.org/pep-0503/>`__ with ``--packages`` and\n   ``--ignore-packages`` option\n\n.. _430:\n\n4.3.0\n~~~~~\n\n-  Implement new option ``--no-version``\n\n.. _420:\n\n4.2.0\n~~~~~\n\n-  Implement new option ``--with-maintainers``\n-  Implement new option ``--python``\n-  Allow version spec in ``--ignore-packages`` parameters\n-  When the ``Author`` field is ``UNKNOWN``, the output is automatically\n   completed from ``Author-email``\n-  When the ``home-page`` field is ``UNKNOWN``, the output is\n   automatically completed from ``Project-URL``\n\n.. _410:\n\n4.1.0\n~~~~~\n\n-  Support case-insensitive license name matching around ``--fail-on``\n   and ``--allow-only`` parameters\n\n.. _403:\n\n4.0.3\n~~~~~\n\n-  Escape unicode output (to e.g. ``&#123;``) in the html output\n\n.. _402:\n\n4.0.2\n~~~~~\n\n-  Add type annotations and code formatter\n\n.. _401:\n\n4.0.1\n~~~~~\n\n-  Fix \"pip-licenses\" is missing in output of\n   ``pip-licenses --with-system`` option\n\n.. _400:\n\n4.0.0\n~~~~~\n\n-  Support for Python 3.11\n-  Dropped support Python 3.7\n-  Migrate Docker base image from Alpine to Debian 11-slim\n-  Breaking changes\n\n   -  Does not work with PTable and depends on prettytable\n   -  Depend on importlib_metadata rather than pip\n\n.. _355:\n\n3.5.5\n~~~~~\n\n-  Search for path defined in `PEP\n   639 <https://peps.python.org/pep-0639/>`__ with\n   ``--with-license-file`` option\n-  Dropped support Python 3.6\n\n.. _354:\n\n3.5.4\n~~~~~\n\n-  Skip directories when detecting license files\n\n.. _353:\n\n3.5.3\n~~~~~\n\n-  Support pip 21.3 or later\n\n.. _352:\n\n3.5.2\n~~~~~\n\n-  Ignore spaces around ``--fail-on`` and ``--allow-only`` parameters\n\n.. _351:\n\n3.5.1\n~~~~~\n\n-  Fix the order in which multiple licenses are output\n\n.. _350:\n\n3.5.0\n~~~~~\n\n-  Handle multiple licenses better with options ``--fail-on`` and\n   ``--allow-only``\n-  Small change in output method for multiple licenses, change the\n   separator from comma to semicolon\n\n   -  Up to 3.4.0: ``Python Software Foundation License, MIT License``\n   -  3.5.0 or later:\n      ``Python Software Foundation License; MIT License``\n\n.. _340:\n\n3.4.0\n~~~~~\n\n-  Implement new option ``--packages``\n\n.. _331:\n\n3.3.1\n~~~~~\n\n-  Fix license summary refer to ``--from`` option\n\n.. _330:\n\n3.3.0\n~~~~~\n\n-  Improves the readability of the help command\n\n.. _320:\n\n3.2.0\n~~~~~\n\n-  Implement new option ``--from=all``\n-  Change license notation under `SPDX license\n   identifier <https://spdx.org/licenses/>`__ style\n\n.. _310:\n\n3.1.0\n~~~~~\n\n-  Implement new option for use in continuous integration\n\n   -  ``--fail-on``\n   -  ``--allow-only``\n\n.. _300:\n\n3.0.0\n~~~~~\n\n-  Dropped support Python 3.5\n-  Clarified support for Python 3.9\n-  Migrate package metadata to ``setup.cfg``\n-  Breaking changes\n\n   -  Change default behavior to ``--from=mixed``\n\n.. _230:\n\n2.3.0\n~~~~~\n\n-  Implement new option for manage unicode characters\n\n   -  ``--filter-strings``\n   -  ``--filter-code-page``\n\n.. _221:\n\n2.2.1\n~~~~~\n\n-  Fixed the file that is selected when multiple matches are made with\n   ``LICENSE*`` with run ``--with-license-file``\n\n.. _220:\n\n2.2.0\n~~~~~\n\n-  Implement new option ``--with-notice-file``\n-  Added to find British style file name ``LICENCE`` with run\n   ``--with-license-file``\n\n.. _211:\n\n2.1.1\n~~~~~\n\n-  Suppress errors when opening license files\n\n.. _210:\n\n2.1.0\n~~~~~\n\n-  Implement new option ``--format=plain-vertical``\n-  Support for outputting license file named ``COPYING *``\n\n.. _201:\n\n2.0.1\n~~~~~\n\n-  Better license file open handling in Python 3\n\n.. _200:\n\n2.0.0\n~~~~~\n\n-  Dropped support Python 2.7\n-  Breaking changes\n\n   -  Removed migration path to obsolete options\n\n      -  ``--from-classifier``\n      -  ``--format-markdown``\n      -  ``--format-rst``\n      -  ``--format-confluence``\n      -  ``--format-html``\n      -  ``--format-json``\n\n-  Implement new option ``--no-license-path``\n\n.. _1180:\n\n1.18.0\n~~~~~~\n\n-  Supports compatibility to work with either PTable or prettytable\n\n.. _1170:\n\n1.17.0\n~~~~~~\n\n-  Implement new option ``--output-file``\n-  Clarified support for Python 3.8\n\n.. _1161:\n\n1.16.1\n~~~~~~\n\n-  Add a help text for ``--format=json-license-finder`` option\n\n.. _1160:\n\n1.16.0\n~~~~~~\n\n-  Implement new option ``--format=json-license-finder``\n\n.. _1152:\n\n1.15.2\n~~~~~~\n\n-  Read license file works well with Windows\n\n.. _1151:\n\n1.15.1\n~~~~~~\n\n-  Skip parsing of license file for packages specified with\n   ``--ignore-packages`` option\n\n.. _1150:\n\n1.15.0\n~~~~~~\n\n-  Implement new option ``--format=csv``\n\n.. _1140:\n\n1.14.0\n~~~~~~\n\n-  Implement new option ``--from=mixed`` as a mixed mode\n\n.. _1130:\n\n1.13.0\n~~~~~~\n\n-  Implement new option ``--from=meta``, ``from=classifier``\n-  Dropped support Python 3.4\n\n.. _1121:\n\n1.12.1\n~~~~~~\n\n-  Fix bug\n\n   -  Change warning output to standard error\n\n.. _1120:\n\n1.12.0\n~~~~~~\n\n-  Supports execution within Docker container\n-  Warning of deprecated options\n-  Fix bug\n\n   -  Ignore ``OSI Approved`` string with multiple licenses\n\n.. _1110:\n\n1.11.0\n~~~~~~\n\n-  Implement new option ``--with-license-file``\n\n.. _1100:\n\n1.10.0\n~~~~~~\n\n-  Implement new option ``--with-description``\n\n.. _190:\n\n1.9.0\n~~~~~\n\n-  Implement new option ``--summary``\n\n.. _180:\n\n1.8.0\n~~~~~\n\n-  Implement new option ``--format-json``\n-  Dropped support Python 3.3\n\n.. _171:\n\n1.7.1\n~~~~~\n\n-  Fix bug\n\n   -  Support pip 10.x\n\n.. _170:\n\n1.7.0\n~~~~~\n\n-  Implement new option ``--format-confluence``\n\n.. _161:\n\n1.6.1\n~~~~~\n\n-  Fix bug\n\n   -  Support display multiple license with ``--from-classifier`` option\n\n-  Improve document\n\n   -  Add section of 'Uninstallation' in README\n\n.. _160:\n\n1.6.0\n~~~~~\n\n-  Implement new option ``--format-html``\n\n.. _150:\n\n1.5.0\n~~~~~\n\n-  Implement new option ``--format-rst``\n\n.. _140:\n\n1.4.0\n~~~~~\n\n-  Implement new option ``--format-markdown``\n-  Include LICENSE file in distribution package\n\n.. _130:\n\n1.3.0\n~~~~~\n\n-  Implement new option ``--ignore-packages``\n\n.. _120:\n\n1.2.0\n~~~~~\n\n-  Implement new option ``--from-classifier``\n\n.. _110:\n\n1.1.0\n~~~~~\n\n-  Improve document\n\n   -  Add ToC to README document\n   -  Add a information of dependencies\n\n.. _100:\n\n1.0.0\n~~~~~\n\n-  First stable release version\n\n.. _020:\n\n0.2.0\n~~~~~\n\n-  Implement new option ``--order``\n\n   -  Default behavior is ``--order=name``\n\n.. _010:\n\n0.1.0\n~~~~~\n\n-  First implementation version\n\n   -  Support options\n\n      -  ``--with-system``\n      -  ``--with-authors``\n      -  ``--with-urls``\n\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Dump the software license list of Python packages installed with pip.",
    "version": "4.4.0",
    "project_urls": {
        "Homepage": "https://github.com/raimon49/pip-licenses",
        "Issues": "https://github.com/raimon49/pip-licenses/issues",
        "Releases": "https://github.com/raimon49/pip-licenses/releases"
    },
    "split_keywords": [
        "pip",
        "pypi",
        "package",
        "license",
        "check"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d02f38a1a1e0a57338fddeec9040a153f6d37cf772d907ede61e2dadc0751b54",
                "md5": "0f01532ecb7735b4f2c7d9228e5ffc96",
                "sha256": "dbad2ac5a25f574cabe2716f2f031a0c5fa359bed9b3ef615301f4e546893b46"
            },
            "downloads": -1,
            "filename": "pip_licenses-4.4.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "0f01532ecb7735b4f2c7d9228e5ffc96",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "~=3.8",
            "size": 20417,
            "upload_time": "2024-03-28T15:21:41",
            "upload_time_iso_8601": "2024-03-28T15:21:41.962013Z",
            "url": "https://files.pythonhosted.org/packages/d0/2f/38a1a1e0a57338fddeec9040a153f6d37cf772d907ede61e2dadc0751b54/pip_licenses-4.4.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "258c709a3c6bd12194a818d0465896fe6070ae5a45d14eb98e7410d98d85f647",
                "md5": "a32e41697f98b0f1238c1ea6749953c1",
                "sha256": "996817118375445243a34faafe23c06f6b2d250247c4046571b5a6722d45be69"
            },
            "downloads": -1,
            "filename": "pip-licenses-4.4.0.tar.gz",
            "has_sig": false,
            "md5_digest": "a32e41697f98b0f1238c1ea6749953c1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "~=3.8",
            "size": 39653,
            "upload_time": "2024-03-28T15:21:44",
            "upload_time_iso_8601": "2024-03-28T15:21:44.818880Z",
            "url": "https://files.pythonhosted.org/packages/25/8c/709a3c6bd12194a818d0465896fe6070ae5a45d14eb98e7410d98d85f647/pip-licenses-4.4.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-28 15:21:44",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "raimon49",
    "github_project": "pip-licenses",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "requirements": [
        {
            "name": "prettytable",
            "specs": [
                [
                    "==",
                    "3.9.0"
                ]
            ]
        },
        {
            "name": "wcwidth",
            "specs": [
                [
                    "==",
                    "0.2.13"
                ]
            ]
        }
    ],
    "lcname": "pip-licenses"
}
        
Elapsed time: 0.24626s