Type object
File match pyproject.toml
Schema URL https://catalog.lintel.tools/schemas/schemastore/pyproject/latest.json
Source https://raw.githubusercontent.com/SchemaStore/schemastore/master/src/schemas/json/pyproject.json

Validate with Lintel

npx @lintel/lintel check
Type: object

Properties

project object

There are two kinds of metadata: static and dynamic.

  • Static metadata is listed in the [project] table directly and cannot be specified or changed by a tool.
  • Dynamic metadata key names are listed inside the dynamic key and represents metadata that a tool will later provide.
One of: object object, object object
20 nested properties
name string required

Valid name consists only of ASCII letters and numbers, period, underscore and hyphen. It must start and end with a letter or number.

pattern=^([a-zA-Z0-9]|[a-zA-Z0-9][\w.-]*[a-zA-Z0-9])$
version string

Version of the project, as defined in the Version specifier specification, and preferably already normalized.

Examples: "42.0.1", "0.3.9rc7.post0.dev5"
pattern=^v?((([0-9]+)!)?([0-9]+(\.[0-9]+)*)([-_\.]?(alpha|a|beta|b|preview|pre|c|rc)[-_\.]?([0-9]+)?)?((-([0-9]+))|([-_\.]?(post|rev|r)[-_\.]?([0-9]+)?))?([-_\.]?(dev)[-_\.]?([0-9]+)?)?)(\+([a-zA-Z0-9]+([-_\.][a-zA-Z0-9]+)*))?$
description string

Summary description of the project in one line. Tools may not accept multiple lines.

readme string | object | object | object

Value can be a relative path to text / markdown (.md suffix) / reStructuredText (.rst suffix) readme file, or a table with either:

  • file key containing path of aforementioned readme file, or
  • text key containing the full readme text embedded inside pyproject.toml.
Examples: "README.md", {"file":"README.txt","content-type":"text/plain"}, {"text":"# Example project\n\nSome readme content","content-type":"text/markdown"}
requires-python string

Specifies the Python version(s) that the distribution is compatible with. Must be in the format specified in Version specifiers.

Examples: ">= 3.7"
license object | object | string

For now it is a table with either:

  • file key specifying a relative path to a license file, or
  • text key containing full license content

Newer tool may accept a single SPDX license expression string instead of a table.

Examples: {"text":"To the extent possible under law, the author(s) who associated this software with CC0 have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty."}, {"file":"LICENSE"}, "MIT", "BSD-2-Clause OR Apache-2.0", "LicenseRef-Proprietary"
license-files string[]

Relative paths or globs to paths of license files. Can be an empty list.

authors projectAuthor[]

People or organizations considered as 'authors' of the project. Each author is a table with name key, email key, or both.

maintainers projectAuthor[]

People or organizations considered as 'maintainers' of the project. Each maintainer is a table with name key, email key, or both.

keywords string[]

List of keywords or tags that describe the project. They could be used by search engines to categorize the project.

uniqueItems=true
classifiers string[]

List of Trove classifiers that describe the project. PyPI use the classifiers to categorize projects.

uniqueItems=true
urls Record<url_label, string>

Table consisting one or multiple label: URL pairs. Common indexes like PyPI uses well-known Project URLs when presenting project pages.

Examples: {"homepage":"https://example.com/example-project"}, {"\"home page\"":"https://example.com/example-project","documentation":"https://doc.example.com/example-project/stable","repository":"https://git.example.com/some/repo.git"}
scripts Record<script_name, string>

Table of entry points that allows package installers to create a command-line wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either importable.module or importable.module:object.attr. Windows platform treats console_scripts specially in that they are wrapped in a console executable, so they are attached to a console and can use sys.stdin, sys.stdout and sys.stderr for I/O.

Examples: {"mycmd":"package.module:object.function"}
gui-scripts Record<script_name, string>

Table of entry points that allows package installers to create a GUI wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either importable.module or importable.module:object.attr. Windows platform treats gui_scripts specially in that they are wrapped in a GUI executable, so they can be started without a console, but cannot use standard streams unless application code redirects them.

Examples: {"mycmd":"package.module:object.function"}
entry-points object

Extra entry point groups that allow applications to load plugins. For example, Pygments (a syntax highlighting tool) can use additional styles from separately installed packages through [project.entry-points."pygments.styles"]. Each key is the name of the entry-point group, and each value is a table of entry points.

Examples: {"pygments.styles":{"monokai":"package.module:object.attribute"}}
dependencies string[]

An array of dependency specifier strings, each representing a mandatory dependent package of the project.

Examples: ["attrs","requests ~= 2.28"]
uniqueItems=true
optional-dependencies object

Each entry is a key/value pair, with the key specifying extra feature name (such as socks in requests[socks]), and value is an array of dependency specifier strings.

Examples: {"typing":["boto3-stubs","typing-extensions ~= 4.1"]}
import-names string[]
import-namespaces string[]
dynamic string[]

Specifies which keys are intentionally unspecified under [project] table so build backend can/will provide such metadata dynamically. Each key must be listed only once. It is an error to both list a key in dynamic and use the key directly in [project]. One of the most common usage is version, which allows build backend to retrieve project version from source code or version control system instead of hardcoding it in pyproject.toml.

Examples: ["version"]
uniqueItems=true
dependency-groups object

Named groups of dependencies, similar to requirements.txt files, which launchers, IDEs, and other tools can find and identify by name. Each item in [dependency-groups] is defined as mapping of group name to list of dependency specifiers.

1 nested properties

Each list item should be either:

  • dependency specifiers, or
  • table with a single key include-group which specifies another group name to include into this one
uniqueItems=true
build-system object

Declares any Python level dependencies that must be installed in order to run the project’s build system successfully.

3 nested properties
requires string[] required

List of strings following the version specifier specification, representing dependencies required to execute the build system.

Examples: "setuptools >= 64.0"
uniqueItems=true
build-backend string

String is formatted following the same module:object syntax as a setuptools entry point. It’s also legal to leave out the :object part.

Examples: "setuptools.build_meta", "my_build_backend:backend"
backend-path string[]

list of directoriesrepend to sys.path when loading the build backend, relative to project root

tool Record<tool_name, object>

Every tool that is used by the project can have users specify configuration data as long as they use a sub-table within [tool]. Generally a project can use the subtable tool.$NAME if, and only if, they own the entry for $NAME in the Cheeseshop/PyPI.

Examples: {"tool":{"isort":{"profile":"black"}}}
21 nested properties

The uncompromising Python code formatter.

Build Python wheels for all platforms.

Optional static typing for Python.

An extremely fast Python linter and formatter, written in Rust.

An extremely fast Python type checker, written in Rust.

hatch Latest Hatch

Modern, extensible Python project management.

maturin Latest Maturin

Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages

Improved build system generator for Python C/C++/Fortran extensions

Easily download, build, install, upgrade, and uninstall Python packages.

Manage Python package versions using SCM (e.g. Git).

A package manager and task runner.

A task runner that works well with pyproject.toml files.

Python dependency management and packaging made easy.

A modern Python package manager with PEP 621 support.

Static type checker for Python.

Standardized automated testing of Python packages

Review a repository for best practices.

The complementary task runner for python.

tombi Latest Tombi

Tombi is a toolkit for TOML; providing a formatter/linter and language server

Standardized automated testing of Python packages

An extremely fast Python package installer and resolver, written in Rust.

Definitions

importNames string[]
projectAuthor object
name string
email string
format=email
BuildSystem object

Declares any Python level dependencies that must be installed in order to run the project’s build system successfully.

requires string[] required

List of strings following the version specifier specification, representing dependencies required to execute the build system.

Examples: "setuptools >= 64.0"
uniqueItems=true
build-backend string

String is formatted following the same module:object syntax as a setuptools entry point. It’s also legal to leave out the :object part.

Examples: "setuptools.build_meta", "my_build_backend:backend"
backend-path string[]

list of directoriesrepend to sys.path when loading the build backend, relative to project root

DependencyGroup string | object[]

Each list item should be either:

  • dependency specifiers, or
  • table with a single key include-group which specifies another group name to include into this one