Package: pylic
pylic - Python license checkerReads pylic configuration inpyproject.tomland checks licenses of installed packages recursively.Principles:Every license has to be allowed explicitly (case-insensitive comparison).All installed packages without a license are considered unsafe and have to be listed as such.Only installed packages are checked for licenses. Packages/dependencies listed inpyproject.tomlare ignored.InstallationpipinstallpylicConfigurationpylicneeds be run in the directory where yourpyproject.tomlfile is located. You can configuresafe_licenses: All licenses you consider safe for usage. The string comparison is case-insensitive.unsafe_packages: If you rely on a package that does not come with a license you have to explicitly list it as such.ignore_packages: Packages that will not be reported as unsafe even if they use a license not listed as safe. This is useful in case an existing projects want to start integratingpylic, but are still using unsafe licenses. This enables first to ignore these packages temporarely, while they're being replaced, second to already validate newly added or updated packages against the safe license set and third to integratepylicfrictionless into CI/CD from the get go.[tool.pylic]safe_licenses=["Apache Software License","Apache License 2.0","MIT License","Python Software Foundation License","Mozilla Public License 2.0 (MPL 2.0)",]unsafe_packages=["unlicensedPackage",]ignore_packages=["ignoredPackage",]Commandspylicprovides the following commands (also seepylic help):check: Checks all installed licenses.list: Lists all installed packages and their corresponding license.Usage ExampleCreate a venv to start with a clean ground and activate itpython-mvenv.venvsource.venv/bin/activateInstallpylicand create an emptypyproject.tomlpipinstallpylic
touchpyproject.tomlInstall all your dependenciespipinstall<packageA><packageB>Run pylicpyliccheckThe output will be similar toFoundunsafepackages:pkg_resources(0.0.0)Foundunsafelicenses:pip(18.1):MITLicensezipp(3.4.1):MITLicensetoml(0.10.2):MITLicensepylic(1.2.0):MITLicensesetuptools(40.8.0):MITLicensetyping-extensions(3.7.4.3):PythonSoftwareFoundationLicenseimportlib-metadata(3.9.0):ApacheSoftwareLicenseThe return code ofpylicis in this case non-zero due to unsafe licenses. This allows usage of pylic in CI.echo$?# prints 1As these licenses and packages are all ok we can configurepylicaccordinglycat<<EOT >> pyproject.toml[tool.pylic]safe_licenses = ["Apache Software License", "MIT License", "Python Software Foundation License"]unsafe_packages = ["pkg_resources"]EOTAfter rerunningpylic checkthe output now reveals a successful validation✨Alllicensesok✨Also the return code now signals that all is goodecho$?# prints 0Usepylic listto list all installed packages and their corresponding licenses.Advanced UsageIn cases where the safe licenses or unsafe packages are centrally managed keeping the configuration in perfect sync to the installed packages might be too cumbersome or even impossible. To support these use cases thecheckcommand provides the two options (see alsocheck --help)--allow-extra-safe-licensesand--allow-extra-unused-packages. These options only affect the returned status code and will keep all corresponding printed warnings unchanged.DevelopmentRequired tools:Poetry (https://python-poetry.org/)Runpoetry installto install all necessary dependencies. Checkout the[tool.taskipy.tasks](seetaskipy) section in thepyproject.tomlfile for utility tasks. You can run these withpoetry run task <task>.Creating a new release is as simple as:Updateversionin the pyproject.toml and the__version__.pyfile.poetry run task release.