{"id":13725092,"url":"https://github.com/raimon49/pip-licenses","last_synced_at":"2026-04-02T17:03:45.155Z","repository":{"id":29077697,"uuid":"120163244","full_name":"raimon49/pip-licenses","owner":"raimon49","description":"Dump the license list of packages installed with pip.","archived":false,"fork":false,"pushed_at":"2026-03-28T22:35:47.000Z","size":716,"stargazers_count":365,"open_issues_count":27,"forks_count":56,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-03-29T00:55:52.204Z","etag":null,"topics":["administrator","license-checking","markdown","pip","pypi-packages"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raimon49.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-02-04T07:07:48.000Z","updated_at":"2026-03-28T22:32:20.000Z","dependencies_parsed_at":"2024-02-12T04:26:05.241Z","dependency_job_id":"d058f059-1969-468d-b9ce-63c14a5ad8fe","html_url":"https://github.com/raimon49/pip-licenses","commit_stats":{"total_commits":398,"total_committers":25,"mean_commits":15.92,"dds":0.1758793969849246,"last_synced_commit":"471fc3dbf43487858c5d761e2ef0a5e30f2996b5"},"previous_names":[],"tags_count":73,"template":false,"template_full_name":null,"purl":"pkg:github/raimon49/pip-licenses","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raimon49%2Fpip-licenses","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raimon49%2Fpip-licenses/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raimon49%2Fpip-licenses/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raimon49%2Fpip-licenses/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raimon49","download_url":"https://codeload.github.com/raimon49/pip-licenses/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raimon49%2Fpip-licenses/sbom","scorecard":{"id":759354,"data":{"date":"2025-08-11","repo":{"name":"github.com/raimon49/pip-licenses","commit":"3fbf20f9d757d2b9298dfc97af1bd3a987124c98"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":2,"reason":"Found 2/10 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/python-package.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-package.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/raimon49/pip-licenses/python-package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-package.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/raimon49/pip-licenses/python-package.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-package.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/raimon49/pip-licenses/python-package.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-package.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/raimon49/pip-licenses/python-package.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating python:3.11-slim-bullseye to python:3.11-slim-bullseye@sha256:9e25f400253a5fa3191813d6a67eb801ca1e6f012b3bd2588fa6920b59e3eba6","Warn: pipCommand not pinned by hash: Dockerfile:17-19","Warn: pipCommand not pinned by hash: Dockerfile:17-19","Warn: pipCommand not pinned by hash: Dockerfile:17-19","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:32","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   5 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":4,"reason":"6 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-79v4-65xg-pq4g","Warn: Project is vulnerable to: GHSA-h4gh-qq45-vh27","Warn: Project is vulnerable to: PYSEC-2022-42969","Warn: Project is vulnerable to: PYSEC-2023-117","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T22:50:41.965Z","repository_id":29077697,"created_at":"2025-08-22T22:50:41.965Z","updated_at":"2025-08-22T22:50:41.965Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31311045,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["administrator","license-checking","markdown","pip","pypi-packages"],"created_at":"2024-08-03T01:02:12.773Z","updated_at":"2026-04-02T17:03:45.144Z","avatar_url":"https://github.com/raimon49.png","language":"Python","funding_links":[],"categories":["Python","Software"],"sub_categories":["Tools \u0026 libs"],"readme":"# pip-licenses\n\n[![Build Status](https://github.com/raimon49/pip-licenses/workflows/Python%20package/badge.svg)](https://github.com/raimon49/pip-licenses/actions?query=workflow%3A%22Python+package%22) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pip-licenses.svg)](https://pypi.org/project/pip-licenses/) [![PyPI version](https://badge.fury.io/py/pip-licenses.svg)](https://badge.fury.io/py/pip-licenses) [![GitHub Release](https://img.shields.io/github/release/raimon49/pip-licenses.svg)](https://github.com/raimon49/pip-licenses/releases) [![Codecov](https://codecov.io/gh/raimon49/pip-licenses/branch/master/graph/badge.svg)](https://codecov.io/gh/raimon49/pip-licenses) [![GitHub contributors](https://img.shields.io/github/contributors/raimon49/pip-licenses)](https://github.com/raimon49/pip-licenses/graphs/contributors) [![BSD License](http://img.shields.io/badge/license-MIT-green.svg)](https://github.com/raimon49/pip-licenses/blob/master/LICENSE) [![PyPI - Downloads](https://img.shields.io/pypi/dm/pip-licenses)](https://pypistats.org/packages/pip-licenses)\n\nDump the software license list of Python packages installed with pip.\n\n## Table of Contents\n\n* [Description](#description)\n* [Installation](#installation)\n* [Usage](#usage)\n* [Command\\-Line Options](#command-line-options)\n    * [Common options](#common-options)\n        * [Option: python](#option-python)\n        * [Option: from](#option-from)\n        * [Option: order](#option-order)\n        * [Option: format](#option-format)\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        * [Option: summary](#option-summary)\n        * [Option: output\\-file](#option-output-file)\n        * [Option: ignore\\-packages](#option-ignore-packages)\n        * [Option: packages](#option-packages)\n    * [Format options](#format-options)\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    * [Verify options](#verify-options)\n        * [Option: fail\\-on](#option-fail-on)\n        * [Option: allow\\-only](#option-allow-only)\n        * [Option: partial\\-match](#option-partial-match)\n    * [pyproject.toml support](#pyprojecttoml-support)\n    * [More Information](#more-information)\n* [Dockerfile](#dockerfile)\n* [About UnicodeEncodeError](#about-unicodeencodeerror)\n* [License](#license)\n    * [Dependencies](#dependencies)\n* [Uninstallation](#uninstallation)\n* [Contributing](#contributing)\n\n## Description\n\n`pip-licenses` is a CLI tool for checking the software license of installed Python packages with pip.\n\nImplemented with the idea inspired by `composer licenses` command in Composer (a.k.a PHP package management tool).\n\nhttps://getcomposer.org/doc/03-cli.md#licenses\n\n## Installation\n\nInstall it via PyPI using `pip` command.\n\n```bash\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\n**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.\n\n```bash\n# Using old version for the Python 3.7 environment\n$ pip install 'pip-licenses\u003c4.0'\n```\n\n**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.\n\n```bash\n$ pip install 'pip-licenses\u003c2.0'\n```\n\n## Usage\n\nExecute the command with your venv (or virtualenv) environment.\n\n```bash\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```\n\n## Command-Line Options\n\n### Common options\n\n#### Option: python\n\nBy 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.\n\n```bash\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\n```bash\n(venv) $ pip-licenses --python=\u003c/path/to/other/env\u003e/bin/python --with-system | grep pip\n pip                       23.0.1       MIT License \n```\n\n#### Option: from\n\nBy 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.\n\n(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)\n\nFor example, even if you check with the `pip show` command, the license is displayed as `UNKNOWN`.\n\n```bash\n(venv) $ pip show setuptools\nName: setuptools\nVersion: 38.5.0\nSummary: Easily download, build, install, upgrade, and uninstall Python packages\nHome-page: https://github.com/pypa/setuptools\nAuthor: Python Packaging Authority\nAuthor-email: distutils-sig@python.org\nLicense: UNKNOWN\n```\n\nThe mixed mode (`--from=mixed`) of this tool works well and looks for licenses.\n\n```bash\n(venv) $ pip-licenses --from=mixed --with-system | grep setuptools\n setuptools    38.5.0   MIT License\n```\n\nIn 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.\n\nIf you want to look only in metadata, use `--from=meta`. If you want to look only in Trove Classifiers, use `--from=classifier`.\n\nTo list license information from both metadata and classifier, use `--from=all`.\n\n**Note:** If neither can find license information, please check with the `with-authors` and `with-urls` options and contact the software author.\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    * Default behavior in this tool\n\n#### Option: order\n\nBy default, it is ordered by package name.\n\nIf you give arguments to the `--order` option, you can output in other sorted order.\n\n```bash\n(venv) $ pip-licenses --order=license\n```\n\n#### Option: format\n\nBy default, it is output to the `plain` format.\n\n##### Markdown\n\nWhen executed with the `--format=markdown` option, you can output list in markdown format. The `m` `md` keyword is prepared as alias of `markdown`.\n\n```bash\n(venv) $ pip-licenses --format=markdown\n| Name   | Version | License |\n|--------|---------|---------|\n| Django | 2.0.2   | BSD     |\n| pytz   | 2017.3  | MIT     |\n```\n\nWhen inserted in a markdown document, it is rendered as follows:\n\n| Name   | Version | License |\n|--------|---------|---------|\n| Django | 2.0.2   | BSD     |\n| pytz   | 2017.3  | MIT     |\n\n##### reST\n\nWhen 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`.\n\n```bash\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```\n\n##### Confluence\n\nWhen 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`.\n\n```bash\n(venv) $ pip-licenses --format=confluence\n| Name   | Version | License |\n| Django | 2.0.2   | BSD     |\n| pytz   | 2017.3  | MIT     |\n```\n\n##### HTML\n\nWhen executed with the `--format=html` option, you can output list in HTML table format. The `h` keyword is prepared as alias of `html`.\n\n```bash\n(venv) $ pip-licenses --format=html\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth\u003eName\u003c/th\u003e\n        \u003cth\u003eVersion\u003c/th\u003e\n        \u003cth\u003eLicense\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eDjango\u003c/td\u003e\n        \u003ctd\u003e2.0.2\u003c/td\u003e\n        \u003ctd\u003eBSD\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003epytz\u003c/td\u003e\n        \u003ctd\u003e2017.3\u003c/td\u003e\n        \u003ctd\u003eMIT\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n```\n\n##### JSON\n\nWhen 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`.\n\n```json\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```\n\n##### JSON LicenseFinder\n\nWhen 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`.\nThis makes pip-licenses a drop-in replacement for LicenseFinder.\n\n```json\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\n```\n\n##### CSV\n\nWhen 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.\n\n```bash\n(venv) $ pip-licenses --format=csv\n\"Name\",\"Version\",\"License\"\n\"Django\",\"2.0.2\",\"BSD\"\n\"pytz\",\"2017.3\",\"MIT\"\n```\n\n##### Plain Vertical\n\nWhen executed with the `--format=plain-vertical` option, you can output a simple plain vertical output that is similar to Angular CLI's\n[--extractLicenses flag](https://angular.io/cli/build#options). This format minimizes rightward drift.\n\n```bash\n(venv) $ pip-licenses --format=plain-vertical --with-license-file --no-license-path\npytest\n5.3.4\nMIT license\nThe MIT License (MIT)\n\nCopyright (c) 2004-2020 Holger Krekel and others\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n\n#### Option: summary\n\nWhen executed with the `--summary` option, you can output a summary of each license.\n\n```bash\n(venv) $ pip-licenses --summary --from=classifier --with-system\n Count  License\n 2      BSD License\n 4      MIT License\n```\n\n**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.\n\n#### Option: output\\-file\n\nWhen executed with the `--output-file` option, write the result to the path specified by the argument.\n\n```\n(venv) $ pip-licenses --format=rst --output-file=/tmp/output.rst\ncreated path: /tmp/output.rst\n```\n\n#### Option: ignore-packages\n\nWhen executed with the `--ignore-packages` option, ignore the package specified by argument from list output.\n\n```bash\n(venv) $ pip-licenses --ignore-packages django\n Name  Version  License\n pytz  2017.3   MIT\n```\n\nPackage names of arguments can be separated by spaces.\n\n```bash\n(venv) $ pip-licenses --with-system --ignore-packages django pip pip-licenses\n Name        Version  License\n prettytable 3.16.0   BSD License\n pytz        2017.3   MIT\n setuptools  38.5.0   UNKNOWN\n wcwidth     0.2.5    MIT License\n```\n\nPackages can also be specified with a version, only ignoring that specific version.\n\n```bash\n(venv) $ pip-licenses --with-system --ignore-packages django pytz:2017.3\n Name        Version  License\n prettytable 3.16.0   BSD License\n setuptools  38.5.0   UNKNOWN\n wcwidth     0.2.5    MIT License\n```\n\n#### Option: packages\n\nWhen executed with the `packages` option, look at the package specified by argument from list output.\n\n```bash\n(venv) $ pip-licenses --packages django\n Name   Version  License\n Django 2.0.2    BSD\n```\n\nPackage names of arguments can be separated by spaces.\n\n```bash\n(venv) $ pip-licenses --with-system --packages prettytable pytz\n Name        Version  License\n prettytable 3.16.0   BSD License\n pytz        2017.3   MIT\n```\n\n### Format options\n\n#### Option: with-system\n\nBy default, system packages such as `pip` and `setuptools` are ignored.\n\nAnd `pip-licenses` and the implicit dependency `prettytable` and `wcwidth` will also be ignored.\n\nIf you want to output all including system package, use the `--with-system` option.\n\n```bash\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.16.0   BSD License\n pytz          2017.3   MIT\n setuptools    38.5.0   UNKNOWN\n wcwidth       0.2.5    MIT License\n```\n\n#### Option: with-authors\n\nWhen executed with the `--with-authors` option, output with author of the package.\n\n```bash\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```\n\n#### Option: with-maintainers\n\nWhen executed with the `--with-maintainers` option, output with maintainer of the package.\n\n**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)\n\n#### Option: with-urls\n\nFor packages without Metadata, the license is output as `UNKNOWN`. To get more package information, use the `--with-urls` option.\n\n```bash\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```\n\n#### Option: with-description\n\nWhen executed with the `--with-description` option, output with short description of the package.\n\n```bash\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```\n\n#### Option: no-version\n\nWhen executed with the `--no-version` option, output without the version number.\n\n```bash\n(venv) $ pip-licenses --no-version\n Name    License\n Django  BSD\n pytz    MIT\n```\n\n#### Option: with-license-file\n\nWhen 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`.\n\nIf you also want to output the file `NOTICE` distributed under Apache License etc., specify the `--with-notice-file` option additionally.\n\n**Note:** If you want to keep the license file path secret, specify `--no-license-path` option together.\n\n**Note:** When using `--with-license-file` with structured formats like CSV, Markdown, reST, or Confluence, the multi-line license file contents can break the formatting. For documentation workflows (like Sphinx), consider using separate commands:\n\n```bash\n# Generate clean RST table for documentation\n$ pip-licenses --from=mixed --format=rst --output-file summary.rst\n\n# Generate license file contents in plain-vertical format for inclusion\n$ pip-licenses --from=mixed --format=plain-vertical --with-license-file --no-license-path --output-file with_license.txt\n```\n\nThe RST file can be rendered nicely in Sphinx, while the plain-vertical format preserves the license file contents as monospace text.\n\n#### Option: filter\\-strings\n\nSome 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).\n\n#### Option: filter\\-code\\-page\n\nIf 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).\n\n\n### Verify options\n\n#### Option: fail\\-on\n\nFail (exit with code 1) on the first occurrence of the licenses of the semicolon-separated list. The license name\nmatching is case-insensitive.\n\nIf `--from=all`, the option will apply to the metadata license field.\n\n```bash\n(venv) $ pip-licenses --fail-on=\"MIT License;BSD License\"\n```\n**Note:** Packages with multiple licenses will fail if at least one license is included in the fail-on list. For example:\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 $?\n1\n\n# Matching is case-insensitive. Following check will fail:\n$ pip-licenses --fail-on=\"mit license\"\n```\n\n#### Option: allow\\-only\n\nFail (exit with code 1) if none of the package licenses are in the semicolon-separated list. The license name\nmatching is case-insensitive.\n\nIf `--from=all`, the option will apply to the metadata license field.\n\n```bash\n(venv) $ pip-licenses --allow-only=\"MIT License;BSD License\"\n```\n**Note:** Packages with multiple licenses will only be allowed if at least one license is included in the allow-only list. For example:\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 $?\n1\n```\n\n#### Option: partial\\-match\n\nIf set, enables partial (substring) matching for `--fail-on` or `--allow-only`. Default is unset (False).\n\nUsage:\n\n```bash\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```\n\n**Note:** Semantics are the same as with `--fail-on` or `--allow-only`. This only enables substring matching.\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 $?\n1\n$ pip-licenses --package keyring --allow-only=\"mit\"\n$ echo $?\n1\n\n# with --partial-match, they pass\n$ pip-licenses --package keyring --partial-match --allow-only=\"MIT\"\n$ echo $?\n0\n$ pip-licenses --package keyring --partial-match --allow-only=\"mit\"\n$ echo $?\n0\n```\n\n### pyproject.toml support\n\nAll command-line options for `pip-licenses` can be configured using the `pyproject.toml` file under the `[tool.pip-licenses]` section. \nThe `pyproject.toml` file is searched in the directory where the `pip-licenses` script is executed.\nCommand-line options specified during execution will override the corresponding options in `pyproject.toml`.\n\nExample `pyproject.toml` configuration:\n\n```toml\n[tool.pip-licenses]\nfrom = \"classifier\"\nignore-packages = [\n  \"scipy\"\n]\nfail-on = \"MIT;\"\n```\n\nIf you run `pip-licenses` without any command-line options, all options will be taken from the `pyproject.toml` file. \nFor instance, if you run `pip-licenses --from=mixed`, the `from` option will be overridden to `mixed`, while all other options will be sourced from `pyproject.toml`.\n\n### More Information\n\nOther, please make sure to execute the `--help` option.\n\n## Dockerfile\n\nYou can check the package license used by your app in the isolated Docker environment.\n\n```bash\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 \u003e docker/requirements.txt\n$ echo \"Flask\" \u003e 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\n**Note:** This Docker image can not check package licenses with C and C ++ Extensions. It only works with pure Python package dependencies.\n\nIf you want to resolve build environment issues, try using not slim image and more.\n\n```diff\ndiff --git a/Dockerfile b/Dockerfile\nindex 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```\n\n## About UnicodeEncodeError\n\nIf a `UnicodeEncodeError` occurs, check your environment variables `LANG` and `LC_TYPE`. Additionally, you can set `PYTHONIOENCODING` to 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\n## License\n\n[MIT License](https://github.com/raimon49/pip-licenses/blob/master/LICENSE)\n\n### Dependencies\n\n* [prettytable](https://pypi.org/project/prettytable/) by Luke Maurits and maintainer of fork version Jazzband team under the BSD-3-Clause License\n    * **Note:** This package implicitly requires [wcwidth](https://pypi.org/project/wcwidth/).\n\n* [tomli](https://pypi.org/project/tomli/) by Taneli Hukkinen under the MIT License\n\n`pip-licenses` has been implemented in the policy to minimize the dependence on external package.\n\n## Uninstallation\n\nUninstall package and dependent package with `pip` command.\n\n```bash\n$ pip uninstall pip-licenses prettytable wcwidth\n```\n\n## Contributing\n\nSee [contribution guidelines](https://github.com/raimon49/pip-licenses/blob/master/CONTRIBUTING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraimon49%2Fpip-licenses","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraimon49%2Fpip-licenses","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraimon49%2Fpip-licenses/lists"}