Skip to main content

Format your pyproject.toml file

Project description

Apply a consistent format to your pyproject.toml file with comment support. See changelog here.

Recent Changes

  • 📝 docs(pyproject-fmt): overhaul the formatting reference by @gaborbernat in #366 <a id=”2.22.0”></a>

Philosophy

This tool aims to be an opinionated formatter, with similar objectives to black. This means it deliberately does not support a wide variety of configuration settings. In return, you get consistency, predictability, and smaller diffs.

Use

Via CLI

pyproject-fmt is a CLI tool that needs a Python interpreter (version 3.10 or higher) to run. We recommend either pipx or uv to install pyproject-fmt into an isolated environment. This has the added benefit that later you will be able to upgrade pyproject-fmt without affecting other parts of the system. We provide a method for pip too here, but we discourage that path if you can:

# install uv per https://docs.astral.sh/uv/#getting-started
uv tool install pyproject-fmt
pyproject-fmt --help

Via pre-commit hook

See pre-commit/pre-commit for instructions, sample .pre-commit-config.yaml:

- repo: https://github.com/tox-dev/pyproject-fmt
  # Use the sha / tag you want to point at
  # or use `pre-commit autoupdate` to get the latest version
  rev: ""
  hooks:
    - id: pyproject-fmt

Via Python

You can use pyproject-fmt as a Python module to format TOML content programmatically.

from pyproject_fmt import run

# Format a pyproject.toml file and return the exit code
exit_code = run(["path/to/pyproject.toml"])

The run function accepts command-line arguments as a list and returns an exit code (0 for success, non-zero for failure).

The tool.pyproject-fmt table is used when present in the pyproject.toml file:

[tool.pyproject-fmt]

# After how many columns split arrays/dicts into multiple lines and wrap long strings;
# use a trailing comma in arrays to force multiline format instead of lowering this value
column_width = 120

# Number of spaces for indentation
indent = 2

# Keep full version numbers (e.g., 1.0.0 instead of 1.0) in dependency specifiers
keep_full_version = false

# Automatically generate Python version classifiers based on requires-python
# Set to false to disable automatic classifier generation
generate_python_version_classifiers = true

# Maximum Python version for generating version classifiers
max_supported_python = "3.14"

# Table format: "short" collapses sub-tables to dotted keys, "long" expands to [table.subtable] headers
table_format = "short"

# Extra newlines between sub-tables in the same group (e.g. "\n" for one blank line between sub-tables)
sub_table_spacing = ""

# Extra newlines between root table groups (e.g. "\n" for one blank line, "\n\n" for two)
separate_root_table = "\n"

# List of tables to force expand regardless of table_format setting
expand_tables = []

# List of tables to force collapse regardless of table_format or expand_tables settings
collapse_tables = []

# List of key patterns to skip string wrapping (supports wildcards like *.parse or tool.bumpversion.*)
skip_wrap_for_keys = []

If not set they will default to values from the CLI.

Shared configuration file

You can place formatting settings in a standalone pyproject-fmt.toml file instead of (or in addition to) the [tool.pyproject-fmt] table. This is useful for monorepos or when you want to share the same configuration across multiple projects without duplicating it in each pyproject.toml.

The formatter searches for pyproject-fmt.toml starting from the directory of the file being formatted and walking up to the filesystem root. The first match wins. You can also pass an explicit path via --config:

pyproject-fmt --config /path/to/pyproject-fmt.toml pyproject.toml

The shared config file uses the same keys as the [tool.pyproject-fmt] table, but without the table header:

column_width = 120
indent = 2
table_format = "short"
sub_table_spacing = ""
separate_root_table = "\n"
max_supported_python = "3.14"

When both a shared config file and a [tool.pyproject-fmt] table exist, per-file settings from the [tool.pyproject-fmt] table take precedence over the shared config file.

Python version classifiers

This tool will automatically generate the Programming Language :: Python :: 3.X classifiers for you. To do so it needs to know the range of Python interpreter versions you support:

  • The lower bound can be set via the requires-python key in the pyproject.toml configuration file (defaults to the oldest non end of line CPython at the time of the release).

  • The upper bound, by default, will assume the latest stable release of CPython at the time of the release, but can be changed via CLI flag or the config file.

Table formatting

You can control how sub-tables are formatted in your pyproject.toml file. There are two formatting styles:

Short format (collapsed) - The default behavior where sub-tables are collapsed into dotted keys. Use this for a compact representation:

[project]
name = "myproject"
urls.homepage = "https://example.com"
urls.repository = "https://github.com/example/myproject"
scripts.mycli = "mypackage:main"

Long format (expanded) - Sub-tables are expanded into separate [table.subtable] sections. Use this for readability when tables have many keys or complex values:

[project]
name = "myproject"

[project.urls]
homepage = "https://example.com"
repository = "https://github.com/example/myproject"

[project.scripts]
mycli = "mypackage:main"

Table spacing

The sub_table_spacing and separate_root_table options control the blank lines inserted between tables. Each option takes a string of \n characters where each \n adds one blank line:

  • sub_table_spacing (default "") controls spacing between sub-tables within the same group. For example, between [tool.ruff] and [tool.ruff.lint]. Set to "\n" to add a blank line between sub-tables.

  • separate_root_table (default "\n") controls spacing between different root table groups. For example, between [project] and [tool.ruff].

[tool.pyproject-fmt]
sub_table_spacing = "\n"  # Add blank line between sub-tables
separate_root_table = "\n"  # One blank line between root table groups (default)

Configuration priority

The formatting behavior is determined by a priority system that allows you to set a global default while overriding specific tables:

  1. collapse_tables - Highest priority, forces specific tables to be collapsed regardless of other settings

  2. expand_tables - Medium priority, forces specific tables to be expanded

  3. table_format - Lowest priority, sets the default behavior for all tables not explicitly configured

This three-tier approach lets you fine-tune formatting for specific tables while maintaining a consistent default. For example:

[tool.pyproject-fmt]
table_format = "short"  # Collapse most tables
expand_tables = ["project.entry-points"]  # But expand entry-points

Specificity rules

Table selectors follow CSS-like specificity rules: more specific selectors win over less specific ones. When determining whether to collapse or expand a table, the formatter checks from most specific to least specific until it finds a match.

For example, with this configuration:

[tool.pyproject-fmt]
table_format = "long"  # Expand all tables by default
collapse_tables = ["project"]  # Collapse project sub-tables
expand_tables = ["project.optional-dependencies"]  # But expand this specific one

The behavior will be:

  • project.urls → collapsed (matches project in collapse_tables)

  • project.scripts → collapsed (matches project in collapse_tables)

  • project.optional-dependencies → expanded (matches exactly in expand_tables, more specific than project)

  • tool.ruff.lint → expanded (no match in collapse/expand, uses table_format default)

This allows you to set broad rules for parent tables while making exceptions for specific sub-tables. The specificity check walks up the table hierarchy: for project.optional-dependencies, it first checks if project.optional-dependencies is in collapse_tables or expand_tables, then checks project, then falls back to the table_format default.

Supported tables

The following sub-tables can be formatted with this configuration:

Project tables:

  • project.urls - Project URLs (homepage, repository, documentation, changelog)

  • project.scripts - Console script entry points

  • project.gui-scripts - GUI script entry points

  • project.entry-points - Custom entry point groups

  • project.optional-dependencies - Optional dependency groups

Tool tables:

  • tool.ruff.format - Ruff formatter settings

  • tool.ruff.lint - Ruff linter settings

  • Any other tool sub-tables

Array of tables:

  • project.authors - Can be inline tables or [[project.authors]]

  • project.maintainers - Can be inline tables or [[project.maintainers]]

  • Any [[table]] entries throughout the file

Array of tables ([[table]]) are automatically collapsed to inline arrays when each inline table fits within the configured column_width. For example:

# Before
[[tool.commitizen.customize.questions]]
type = "list"

[[tool.commitizen.customize.questions]]
type = "input"

# After (with table_format = "short")
[tool.commitizen]
customize.questions = [{ type = "list" }, { type = "input" }]

If any inline table exceeds column_width, the array of tables remains in [[...]] format to maintain readability and TOML 1.0.0 compatibility (inline tables cannot span multiple lines).

String wrapping

By default, the formatter wraps long strings that exceed the column width using line continuations. However, some strings such as regex patterns should not be wrapped because wrapping can break their functionality.

You can configure which keys should skip string wrapping using the skip_wrap_for_keys option:

[tool.pyproject-fmt]
skip_wrap_for_keys = ["*.parse", "*.regex", "tool.bumpversion.*"]

Pattern matching

The skip_wrap_for_keys option supports glob-like patterns:

  • Exact match: tool.bumpversion.parse matches only that specific key

  • Wildcard suffix: *.parse matches any key ending with .parse (e.g., tool.bumpversion.parse, project.parse)

  • Wildcard prefix: tool.bumpversion.* matches any key under tool.bumpversion (e.g., tool.bumpversion.parse, tool.bumpversion.serialize)

  • Global wildcard: * skips wrapping for all strings

Examples: ["*.parse", "*.regex"] to preserve regex fields, ["tool.bumpversion.*"] for a specific tool section, or ["*"] to skip all string wrapping.

pyproject-fmt is an opinionated formatter, much like black is for Python code. The tool intentionally provides minimal configuration options because the goal is to establish a single standard format that all pyproject.toml files follow.

Benefits of this approach:

  • Less time configuring tools

  • Smaller diffs when committing changes

  • Easier code reviews since formatting is never a question

While a few key options exist (column_width, indent, table_format, sub_table_spacing, separate_root_table), the tool does not expose dozens of toggles. You get what the maintainers have chosen to be the right balance of readability, consistency, and usability. The column_width setting controls when arrays are split into multiple lines and when string values are wrapped using line continuations.

General Formatting

These rules apply uniformly across the entire pyproject.toml file.

Table Ordering

Tables are reordered into a consistent structure:

  1. [build-system]

  2. [project]

  3. [dependency-groups]

  4. [tool.*] sections in the order:

    1. Build backends: poetry, poetry-dynamic-versioning, pdm, setuptools, distutils, setuptools_scm, hatch, flit, scikit-build, meson-python, maturin, pixi, whey, py-build-cmake, sphinx-theme-builder, uv

    2. Builders: cibuildwheel, nuitka

    3. Linters/formatters: autopep8, black, yapf, djlint, ruff, isort, flake8, pycln, nbqa, pylint, repo-review, codespell, docformatter, pydoclint, interrogate, tomlsort, check-manifest, check-sdist, check-wheel-contents, deptry, vulture, pyproject-fmt, typos, bandit

    4. Type checkers: mypy, pyrefly, pyright, ty, django-stubs

    5. Testing: pytest, pytest_env, pytest-enabler, coverage

    6. Task runners: doit, spin, tox

    7. Release tools: bumpversion, commitizen, jupyter-releaser, semantic_release, tbump, towncrier, vendoring

    8. Any other tool.* in alphabetical order

  5. Any other tables (alphabetically)

String Quotes

All strings use double quotes by default. Single quotes are only used when the value contains double quotes:

# Before
name = 'my-package'
description = "He said \"hello\""

# After
name = "my-package"
description = 'He said "hello"'

Key Quotes

TOML keys are normalized to the simplest valid form. Keys that are valid bare keys (containing only A-Za-z0-9_-) have redundant quotes stripped. Single-quoted (literal) keys that require quoting are converted to double-quoted (basic) strings with proper escaping. This applies to all keys: table headers, key-value pairs, and inline table keys:

# Before
[tool."ruff"]
"line-length" = 120
lint.per-file-ignores.'tests/*' = ["S101"]

# After
[tool.ruff]
line-length = 120
lint.per-file-ignores."tests/*" = ["S101"]

Backslashes and double quotes within literal keys are escaped during conversion:

# Before
lint.per-file-ignores.'path\to\file' = ["E501"]

# After
lint.per-file-ignores."path\\to\\file" = ["E501"]

Array Formatting

Arrays are formatted based on line length, trailing comma presence, and comments:

# Short arrays stay on one line
keywords = ["python", "toml"]

# Long arrays that exceed column_width are expanded and get a trailing comma
dependencies = [
    "requests>=2.28",
    "click>=8.0",
]

# Trailing commas signal intent to keep multiline format
classifiers = [
    "Development Status :: 4 - Beta",
]

# Arrays with comments are always multiline
lint.ignore = [
    "E501",  # Line too long
    "E701",
]

Multiline formatting rules:

An array becomes multiline when any of these conditions are met:

  1. Trailing comma present - A trailing comma signals intent to keep multiline format

  2. Exceeds column width - Arrays longer than column_width are expanded (and get a trailing comma added)

  3. Contains comments - Arrays with inline or leading comments are always multiline

String Wrapping

Strings that exceed column_width (including the key name and " = " prefix) are wrapped into multi-line triple-quoted strings using line continuations:

# Before (exceeds column_width)
description = "A very long description that goes beyond the configured column width limit"

# After
description = """\
  A very long description that goes beyond the \
  configured column width limit\
  """

Wrapping prefers breaking at spaces and at " :: " separators (common in Python classifiers). Strings inside inline tables are never wrapped. Strings that contain actual newlines are preserved as multi-line strings without adding line continuations. Use skip_wrap_for_keys to prevent wrapping for specific keys.

Table Formatting

Sub-tables can be formatted in two styles controlled by table_format:

Short format (collapsed to dotted keys):

[project]
urls.homepage = "https://example.com"
urls.repository = "https://github.com/example/project"

Long format (expanded to table headers):

[project.urls]
homepage = "https://example.com"
repository = "https://github.com/example/project"

Table spacing:

By default, different table groups (e.g. [project] and [tool.ruff]) are separated by a blank line, while sub-tables within the same group (e.g. [tool.ruff] and [tool.ruff.lint]) are kept compact with no blank line between them. You can control this with sub_table_spacing and separate_root_table. Each option takes a string of \n characters where each \n adds one blank line. For example, setting sub_table_spacing = "\n" adds a blank line between sub-tables:

[tool.ruff]
line-length = 120

[tool.ruff.lint]
select = ["E", "W"]

Comment Preservation

All comments are preserved during formatting:

  • Inline comments - Comments after a value on the same line stay with that value

  • Leading comments - Comments on the line before an entry stay with the entry below

  • Block comments - Multi-line comment blocks are preserved

Inline comment alignment:

Inline comments within arrays are aligned independently per array, based on that array’s longest value:

# Before - comments at inconsistent positions
lint.ignore = [
  "COM812", # Conflict with formatter
  "CPY", # No copyright statements
  "ISC001",   # Another rule
]

# After - comments align to longest value in this array
lint.ignore = [
  "COM812",  # Conflict with formatter
  "CPY",     # No copyright statements
  "ISC001",  # Another rule
]

Table-Specific Handling

Beyond general formatting, each table has specific key ordering and value normalization rules.

[build-system]

The PEP 517 / PEP 518 table that declares how your project is built. See the packaging specification.

Keys are ordered build-backendrequiresbackend-path, and requires is normalized and sorted.

Key ordering: build-backendrequiresbackend-path

Value normalization:

  • requires: dependencies normalized per PEP 508 and sorted alphabetically by package name

  • backend-path: entries sorted alphabetically

# Before
[build-system]
requires = ["setuptools >= 45", "wheel"]
build-backend = "setuptools.build_meta"

# After
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools>=45", "wheel"]

[project]

The PEP 621 core metadata table. See the packaging specification.

Keys follow the canonical metadata order; name, dependencies, classifiers, and keywords are normalized and sorted.

Key ordering: nameversionimport-namesimport-namespacesdescriptionreadmekeywordslicenselicense-filesmaintainersauthorsrequires-pythonclassifiersdynamicdependenciesoptional-dependenciesurlsscriptsgui-scriptsentry-points

Field normalizations:

name

Converted to canonical format (lowercase with hyphens): My_Packagemy-package

description

Whitespace normalized: multiple spaces collapsed, consistent spacing after periods.

license

License expression operators (and, or, with) uppercased: MIT or Apache-2.0MIT OR Apache-2.0

requires-python

Whitespace removed: >= 3.9>=3.9

keywords

Deduplicated (case-insensitive) and sorted alphabetically.

dynamic

Sorted alphabetically.

import-names / import-namespaces

Semicolon spacing normalized (foo;barfoo; bar), entries sorted alphabetically.

classifiers

Deduplicated and sorted alphabetically.

authors / maintainers

Sorted by name, then email. Keys within each entry ordered: nameemail.

Dependency normalization: every dependency array (dependencies, optional-dependencies.*) is normalized per PEP 508 (spaces removed, redundant .0 suffixes stripped unless keep_full_version = true) and sorted alphabetically by canonical package name:

# Before
dependencies = ["requests >= 2.0.0", "click~=8.0"]

# After
dependencies = ["click>=8", "requests>=2"]

Optional-dependency extra names are normalized to lowercase with hyphens:

# Before
[project.optional-dependencies]
Dev_Tools = ["pytest"]

# After
[project.optional-dependencies]
dev-tools = ["pytest"]

Python version classifiers are generated automatically from requires-python and max_supported_python. Disable with generate_python_version_classifiers = false:

# With requires-python = ">=3.10" and max_supported_python = "3.14"
classifiers = [
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
]

Entry points: inline tables within entry-points are expanded to dotted keys:

# Before
entry-points.console_scripts = { mycli = "mypackage:main" }

# After
entry-points.console_scripts.mycli = "mypackage:main"

Authors / maintainers can be inline tables or an expanded array of tables (controlled by table_format, expand_tables, and collapse_tables):

# Short format (inline)
authors = [{ name = "Alice", email = "alice@example.com" }]

# Long format (array of tables)
[[project.authors]]
name = "Alice"
email = "alice@example.com"

[dependency-groups]

The PEP 735 table for named groups of development dependencies. See the packaging specification.

Groups are ordered devtesttypedocs → others alphabetically; each group is normalized and sorted.

Key ordering: devtesttypedocs → others alphabetically

Value normalization:

  • all dependencies normalized per PEP 508

  • sorted with regular dependencies first, then include-group entries

# Before
[dependency-groups]
dev = [{ include-group = "test" }, "ruff>=0.4", "mypy>=1"]

# After
[dependency-groups]
dev = ["mypy>=1", "ruff>=0.4", { include-group = "test" }]

[tool.poetry]

Poetry is a Python dependency management and packaging tool. See its pyproject.toml reference.

Covers both Poetry 1.x (legacy metadata under [tool.poetry]) and Poetry 2.x (metadata moved to [project], Poetry-specific keys still here). Metadata is ordered by section, Poetry-specific inline tables get canonical key order, and set-semantic arrays are sorted while order-significant ones are preserved.

Top-level key ordering:

  1. Identity: nameversiondescriptionpackage-mode

  2. License & authorship: licenseauthorsmaintainers

  3. Documentation: readmehomepagerepositorydocumentation

  4. Discovery: keywordsclassifiers

  5. Packaging contents: packagesincludeexcludebuild

  6. Dependencies (sub-tables): dependenciesdev-dependenciesgroupextras

  7. Entry points / distribution: scriptspluginsurlssource

  8. Poetry runtime constraints: requires-poetryrequires-pluginsbuild-constraints

Sub-table key ordering:

[tool.poetry.dependencies] / [tool.poetry.dev-dependencies] / per-group dependencies

python first (interpreter constraint), all other package names alphabetized.

[tool.poetry.group.<name>]

optionalinclude-groupsdependencies.

[tool.poetry.extras], [tool.poetry.scripts], [tool.poetry.urls], [tool.poetry.plugins.*], [tool.poetry.requires-plugins], [tool.poetry.build-constraints]

Keys alphabetized.

[tool.poetry.build]

scriptgenerate-setup-file.

[[tool.poetry.source]]

Each entry’s keys ordered nameurlprioritylinksindexed, with the deprecated default and secondary keys placed last. Array order itself is preserved (priority ordering is semantically significant).

Sorted arrays:

  • keywords, classifiers: deduplicated (case-insensitive) and sorted alphabetically.

  • exclude: sorted alphabetically.

  • [tool.poetry.extras] values (each extras.<name>): sorted alphabetically.

  • [tool.poetry.group.<name>.include-groups]: sorted alphabetically.

  • Per-dependency extras arrays (in dependencies, dev-dependencies, per-group dependencies, requires-plugins, build-constraints): sorted alphabetically.

Preserved as written (order is semantically significant): authors, maintainers, packages, include, readme (when an array), multi-constraint dependency arrays, and [[tool.poetry.source]] entries.

Inline-table key ordering: when a Poetry-specific inline table is detected (via discriminator keys unique to Poetry’s schema), its keys are reordered:

  • Sources ({ priority = ... }, { secondary = ... }, { links = ... }, { indexed = ... }): nameurlprioritylinksindexeddefaultsecondary.

  • Git dependencies ({ git = ... }): gitbranchtagrevsubdirectorypythonplatformmarkersallow-prereleasesallows-prereleasesoptionalextrasdevelop.

  • Path dependencies ({ path = ... }): pathdevelopsubdirectorypythonplatformmarkersoptionalextras.

  • File dependencies ({ file = ... }): filesubdirectorypythonplatformmarkersoptionalextras.

Inline tables that don’t match any Poetry-specific schema (for example [[project.authors]] inline form { name = "...", email = "..." }) are left untouched.

# Before
[[tool.poetry.source]]
priority = "primary"
url = "https://pypi.example.com/simple"
name = "private"

[tool.poetry.dependencies]
zebra = "^1.0"
python = "^3.11"
foo = { branch = "main", git = "https://github.com/example/foo" }

# After
[tool.poetry]
dependencies.python = "^3.11"
dependencies.foo = { git = "https://github.com/example/foo", branch = "main" }
dependencies.zebra = "^1.0"
source = [ { name = "private", url = "https://pypi.example.com/simple", priority = "primary" } ]

[tool.pdm.*]

PDM is a modern Python package and dependency manager. See its build configuration reference.

Top-level keys are ordered distribution → resolution → version → build → scripts → source → dev-dependencies → publish → options; name and glob arrays are sorted, while source-entry order is preserved.

Top-level key ordering: distribution / package-type / plugins → resolution → version → build → scripts → source → dev-dependencies → publish → options.

Sub-table ordering (collapsed to dotted keys):

  • version: sourcepathgetterwrite_towrite_templatetag_regextag_filterfallback_versionversion_format.

  • build: includesexcludessource-includespackage-diris-purelibrun-setuptoolscustom-hookeditable-backend.

  • [[tool.pdm.source]] (array of tables, order preserved): per-entry nameurltypeverify_sslinclude_packagesexclude_packages.

Sorted arrays: plugins, build.includes, build.excludes, build.source-includes, resolution.excludes, every dev-dependencies.<group> value array, and include_packages / exclude_packages inside source entries.

[tool.setuptools] and [tool.setuptools_scm]

setuptools is a long-standing build backend and packaging library; setuptools_scm derives the package version from SCM tags. See the setuptools pyproject.toml reference and the setuptools_scm configuration reference.

Keys in both tables are grouped (discovery → data → metadata → deprecated); name and glob arrays are sorted, while literal lists like packages are preserved.

[tool.setuptools] top-level key ordering (grouped):

  1. Packaging discovery: py-modulespackages.find.* / packages.find-namespace.*packagespackage-dir

  2. Package data: include-package-datapackage-dataexclude-package-data

  3. Dynamic metadata: dynamic

  4. Extensions / build customization: ext-modulescmdclass

  5. Distribution metadata: platformsprovidesobsoleteslicense-files

  6. Data files: data-files

  7. Deprecated / obsolete (pushed last): script-filesnamespace-packageszip-safeeager-resourcesdependency-links

[tool.setuptools.packages.find] / [tool.setuptools.packages.find-namespace] inner ordering: whereincludeexcludenamespaces.

[tool.setuptools.package-data] / [tool.setuptools.exclude-package-data] / [tool.setuptools.data-files] ordering: the catch-all "*" pattern always goes first, then the other package patterns alphabetically; each value (an array of glob patterns) is sorted alphabetically.

[tool.setuptools.dynamic] ordering: field names alphabetized. Inline-table directives (e.g. version = { attr = "pkg.__version__" } or readme = { file = "README.md", content-type = "text/markdown" }) get their keys ordered attrfilecontent-type.

Sorted arrays:

  • py-modules, platforms, provides, obsoletes, script-files, namespace-packages, eager-resources: alphabetized.

  • packages.find.include / packages.find.exclude / packages.find-namespace.*: alphabetized.

  • Values inside package-data / exclude-package-data / data-files tables: alphabetized.

Preserved as written (order is meaningful): packages (literal list, first match wins), license-files (PEP 639 concatenation order), and everything under [[tool.setuptools.ext-modules]] (compiler and linker argv arrays).

[tool.setuptools_scm] key ordering (grouped):

  1. Version output: version_fileversion_file_template

  2. Version computation: version_schemelocal_schemeversion_clsnormalize

  3. Root discovery: rootrelative_tofallback_rootparentsearch_parent_directoriesdist_name

  4. Tag / parse: tag_regexparseparentdir_prefix_versionfallback_version

  5. Nested SCM-specific tables: scm.git.pre_parsescm.git.describe_command

  6. Deprecated (pushed last): git_describe_command (use scm.git.describe_command) → write_to (use version_file) → write_to_template (use version_file_template) → version_class (use version_cls) → template

# Before
[tool.setuptools]
zip-safe = false
py-modules = ["foo", "bar"]
packages = ["my_pkg"]

[tool.setuptools.packages.find]
namespaces = true
where = ["src"]
include = ["my_pkg*"]

[tool.setuptools.dynamic]
readme = { content-type = "text/markdown", file = "README.md" }

# After
[tool.setuptools]
py-modules = [ "bar", "foo" ]
packages.find.where = [ "src" ]
packages.find.include = [ "my_pkg*" ]
packages.find.namespaces = true
packages = [ "my_pkg" ]
dynamic.readme = { file = "README.md", content-type = "text/markdown" }
zip-safe = false

[tool.hatch.*]

Hatch is a modern, extensible Python project manager built around the Hatchling build backend. See its build configuration reference.

Keys across the many [tool.hatch.*] sub-tables are grouped (version → metadata → build → publish → workspace → environments); name and path arrays are sorted, while build-hook and matrix order are preserved.

Key ordering: keys at [tool.hatch] level (after collapse, dotted version.* / build.* / metadata.* / envs.* / publish.* / workspace.*):

  1. Version: version.sourceversion.pathversion.patternversion.expressionversion.schemeversion.validate-bumpversion.fallback-versionversion.raw-options.

  2. Metadata: metadata.allow-direct-referencesmetadata.allow-ambiguous-featuresmetadata.hooks.

  3. Build: build.dev-mode-dirsbuild.directorybuild.sourcesbuild.packagesbuild.includebuild.excludebuild.force-includebuild.artifactsbuild.ignore-vcsbuild.skip-excluded-dirsbuild.reproduciblebuild.hooks → wheel target (packages, include, exclude, force-include, artifacts, hooks, shared-data, extra-metadata, etc.) → sdist target (include, exclude, force-include, support-legacy, strict-naming).

  4. Publish: publish.index.disablepublish.index.repospublish.index.

  5. Workspace: workspace.membersworkspace.exclude.

  6. Environments (envs.<name>.*): each environment’s keys follow typetemplatedetacheddescriptionplatformspythonpathinstallerskip-installsystem-packagesdev-modefeaturesdependenciesextra-dependenciesextra-argspre-install-commandspost-install-commandsenv-includeenv-excludeenv-varsscriptsmatrixmatrix-name-formatoverrides.

Sorted arrays:

  • Build: include, exclude, force-include, artifacts, packages, sources, dev-mode-dirs, and the matching build.targets.wheel.* / build.targets.sdist.* arrays.

  • Environments: per-env dependencies, extra-dependencies, features, platforms, env-include, env-exclude, pre-install-commands, post-install-commands.

  • Workspace: members, exclude.

scripts and env-vars sub-tables under each environment have their inner keys alphabetized.

Preserved as written: build-hook order and matrix entry order (both carry semantic meaning).

[tool.scikit-build]

scikit-build-core is a CMake-based build backend for Python C/C++ extensions. See its configuration reference.

Keys are ordered meta → build → cmake → ninja → sdist → wheel → install → editable → logging → metadata → search → generateoverrides; name and path lists are sorted, while cmake/ninja argv are preserved.

Key ordering: meta keys (minimum-version, build-dir, fail, experimental, strict-config) → buildcmakeninjasdistwheelinstalleditablelogging / messagesmetadatasearchgenerate (array of tables) → overrides (array of tables).

Sorted arrays: include, exclude, packages, files, targets, components, exclude-fields.

Preserved as written: args and define (CLI argv for cmake/ninja).

[tool.maturin]

Maturin builds and publishes Rust-based Python extension modules. See its configuration reference.

Keys are ordered module identity → source layout → cargo settings → compatibility/strip → behavior; set-semantic arrays are sorted, while cargo/rustc argv are preserved.

Key ordering: module identity (module-name, bindings, python-source, python-packages, python-bin-path) → source layout (src, manifest-path, include, exclude, sdist-include, sdist-generator, data) → cargo settings (features, no-default-features, all-features, cargo-extra-args, rustc-extra-args, config, profile, target, target-dir) → compatibility / strip (compatibility, auditwheel, skip-auditwheel, strip, frozen, locked, offline, zig) → behavior (use-cross).

Sorted arrays: python-packages, include, exclude, sdist-include, features (all set semantics).

Preserved as written: cargo-extra-args / rustc-extra-args (CLI argv).

[tool.pixi]

Pixi is a cross-platform conda/PyPI package and environment manager. See its pyproject.toml reference.

Keys are grouped by function (workspace metadata → configuration → dependencies → environments → build); channel and platform arrays are sorted.

Key ordering:

  1. Workspace metadata: workspace.nameworkspace.versionworkspace.descriptionworkspace.authorsworkspace.licenseworkspace.license-fileworkspace.readmeworkspace.homepageworkspace.repositoryworkspace.documentation

  2. Workspace configuration: workspace.channelsworkspace.platformsworkspace.channel-priorityworkspace.solve-strategyworkspace.conda-pypi-mapworkspace.requires-pixiworkspace.exclude-newerworkspace.previewworkspace.build-variantsworkspace.build-variants-files

  3. Dependencies: dependencieshost-dependenciesbuild-dependenciesrun-dependenciesconstraintspypi-dependenciespypi-options

  4. Development: dev

  5. Environment setup: system-requirementsactivationtasks

  6. Targeting: targetfeatureenvironments

  7. Package build: package

Sorted arrays: workspace.channels, workspace.platforms, workspace.preview, workspace.build-variants-files.

[tool.uv]

uv is a fast Python package and project manager from Astral. See its settings reference.

Keys are grouped by function (Python → dependencies → sources → resolution → build → network → publishing → workspace); package-name arrays and the sources table are sorted alphabetically.

Key ordering:

  1. Version & Python: required-versionpython-preferencepython-downloads

  2. Dependencies: dev-dependenciesdefault-groupsdependency-groupsconstraint-dependenciesoverride-dependenciesexclude-dependenciesdependency-metadata

  3. Sources & indexes: sourcesindexindex-urlextra-index-urlfind-linksno-indexindex-strategykeyring-provider

  4. Package handling: no-binary*no-build*no-sources*reinstall*upgrade*

  5. Resolution: resolutionprereleasefork-strategyenvironmentsrequired-environmentsexclude-newer*

  6. Build & Install: compile-bytecodelink-modeconfig-settings*extra-build-*concurrent-buildsconcurrent-downloadsconcurrent-installs

  7. Network & Security: allow-insecure-hostnative-tlsofflineno-cachecache-dirhttp-proxyhttps-proxyno-proxy

  8. Publishing: publish-urlcheck-urltrusted-publishing

  9. Python management: python-install-mirrorpypy-install-mirrorpython-downloads-json-url

  10. Workspace & Project: managedpackageworkspaceconflictscache-keysbuild-backend

  11. Other: pippreviewtorch-backend

Sorted arrays:

Package-name arrays

constraint-dependencies, override-dependencies, dev-dependencies, exclude-dependencies, no-binary-package, no-build-package, no-build-isolation-package, no-sources-package, reinstall-package, upgrade-package

Other arrays

environments, required-environments, allow-insecure-host, no-proxy, workspace.members, workspace.exclude

Sources table: sources entries are sorted alphabetically by package name:

# Before
[tool.uv.sources]
zebra = { git = "..." }
alpha = { path = "..." }

# After
[tool.uv.sources]
alpha = { path = "..." }
zebra = { git = "..." }

pip subsection: [tool.uv.pip] follows the same rules, with arrays like extra, no-binary-package, no-build-package, reinstall-package, and upgrade-package sorted alphabetically.

[tool.cibuildwheel]

cibuildwheel builds Python wheels across platforms in CI. See its options reference.

Keys are ordered selection → build config → build phases → test phases → platform images → per-platform sub-tables → overrides; set-semantic arrays are sorted, while argv-like lists are preserved.

Key ordering: selection (build, skip, test-skip, archs, enable, free-threaded-support) → build configuration (build-frontend, build-verbosity, config-settings, dependency-versions, environment, environment-pass) → build phases (before-all, before-build, repair-wheel-command) → test phases (before-test, test-command, test-requires, test-extras, test-groups, test-sources) → platform images (manylinux-*-image, musllinux-*-image) → container-engine → per-platform sub-tables (linux, macos, windows, android, ios, pyodide) → overrides last.

Per-platform sub-tables follow the same inner ordering. [[tool.cibuildwheel.overrides]] entries place select first (required), then the regular cibuildwheel keys; the array order itself is preserved (later overrides win).

Sorted arrays: enable, test-extras, test-groups.

Preserved as written: most other array-valued keys (test-requires, before-all, test-command, the various environment* fields) are CLI argv or ordered lists.

[tool.autopep8]

autopep8 automatically formats Python code to conform to PEP 8. See its configuration reference.

Keys are ordered length/indent → mode → rules → behavior; rule lists are sorted.

Key ordering: length/indent → mode (in-place, recursive, diff, list-fixes) → rules (ignore, select, exclude) → behavior.

Sorted arrays: ignore, select, exclude.

[tool.black]

Black is an opinionated Python code formatter. See its configuration reference.

Keys follow Black’s option grouping; target-version and enable-unstable-feature arrays are alphabetized.

Key ordering:

  1. required-versiontarget-versionline-length

  2. File selection: includeextend-excludeforce-excludeexclude

  3. Behavior: skip-string-normalizationskip-magic-trailing-commapreviewunstableenable-unstable-featurefastworkers

  4. Output: colorverbosequiet

Sorted arrays: target-version (so py39 precedes py310), enable-unstable-feature.

The include / exclude family are regex strings, not arrays, so they’re left as-is.

[tool.yapf]

YAPF is a configurable Python code formatter from Google. See its configuration reference.

A single flat table: based_on_style comes first (it sets the defaults), then the rest in a fixed order.

Key ordering: based_on_style first (sets defaults), then column_limit, indent_width, continuation_indent_width, then the remaining keys alphabetized.

[tool.djlint]

djLint is a linter and formatter for HTML templates (Django, Jinja, and more). See its configuration reference.

Keys are ordered profile/scope → formatting → linting → ignores → output; exclude and block lists are sorted.

Key ordering: profile/scope → formatting → linting → ignores → output.

Sorted arrays: exclude, extend_exclude, custom_blocks, custom_html, ignore, ignore_blocks.

[tool.ruff]

Ruff is a fast Python linter and formatter written in Rust. See its settings reference.

Keys follow Ruff’s option grouping (global → paths → behavior → output → formatlint); rule-code, path, and name arrays are sorted with natural ordering (RUF1 < RUF9 < RUF10).

Key ordering:

  1. Global settings: required-versionextendtarget-versionline-lengthindent-widthtab-size

  2. Path settings: builtinsnamespace-packagessrcincludeextend-includeexcludeextend-excludeforce-excluderespect-gitignore

  3. Behavior flags: previewfixunsafe-fixesfix-onlyshow-fixesshow-source

  4. Output settings: output-formatcache-dir

  5. format.* keys

  6. lint.* keys: selectextend-selectignoreextend-ignoreper-file-ignoresfixableunfixable → plugin configurations

Sorted arrays: alphabetical with natural ordering (RUF1 < RUF9 < RUF10):

# These arrays are sorted:
lint.select = ["E", "F", "I", "RUF"]
lint.ignore = ["E501", "E701"]

# Per-file-ignores values are also sorted:
lint.per-file-ignores."tests/*.py" = ["D103", "S101"]

The full set of sorted array keys:

Top-level

exclude, extend-exclude, include, extend-include, builtins, namespace-packages, src

Format

format.exclude

Lint

select, extend-select, ignore, extend-ignore, fixable, extend-fixable, unfixable, extend-safe-fixes, extend-unsafe-fixes, external, task-tags, exclude, typing-modules, allowed-confusables, logger-objects

Per-file patterns

lint.per-file-ignores.*, lint.extend-per-file-ignores.*

Plugin arrays

lint.flake8-bandit.hardcoded-tmp-directory, lint.flake8-bandit.hardcoded-tmp-directory-extend, lint.flake8-boolean-trap.extend-allowed-calls, lint.flake8-bugbear.extend-immutable-calls, lint.flake8-builtins.builtins-ignorelist, lint.flake8-gettext.extend-function-names, lint.flake8-gettext.function-names, lint.flake8-import-conventions.banned-from, lint.flake8-pytest-style.raises-extend-require-match-for, lint.flake8-pytest-style.raises-require-match-for, lint.flake8-self.extend-ignore-names, lint.flake8-self.ignore-names, lint.flake8-tidy-imports.banned-module-level-imports, lint.flake8-type-checking.exempt-modules, lint.flake8-type-checking.runtime-evaluated-base-classes, lint.flake8-type-checking.runtime-evaluated-decorators, lint.isort.constants, lint.isort.default-section, lint.isort.extra-standard-library, lint.isort.forced-separate, lint.isort.no-lines-before, lint.isort.required-imports, lint.isort.single-line-exclusions, lint.isort.variables, lint.pep8-naming.classmethod-decorators, lint.pep8-naming.extend-ignore-names, lint.pep8-naming.ignore-names, lint.pep8-naming.staticmethod-decorators, lint.pydocstyle.ignore-decorators, lint.pydocstyle.property-decorators, lint.pyflakes.extend-generics, lint.pylint.allow-dunder-method-names, lint.pylint.allow-magic-value-types

[tool.isort]

isort sorts and organizes Python imports. See its configuration options.

profile comes first (it sets the defaults everything else overrides), then output style, known sources, separation, skip patterns, and import edits; name lists are sorted, while sequence-sensitive lists are preserved.

Key ordering:

  1. profile: sets defaults that the keys below override

  2. Output style: line, wrap, indent, and multi-line options

  3. Known sources: sectionsdefault_sectionknown_standard_libraryextra_standard_libraryknown_third_partyknown_first_partyknown_local_folderknown_other

  4. Forced separation, skip patterns, import add/remove, and section heading comments

Sorted arrays: known_standard_library, extra_standard_library, known_third_party, known_first_party, known_local_folder, known_other, namespace_packages, src_paths, skip, skip_glob, extend_skip, extend_skip_glob, supported_extensions, blocked_extensions, single_line_exclusions, forced_separate, treat_comments_as_code, treat_all_comments_as_code, constants, variables.

Preserved as written (sequence is significant): sections (output section order), no_lines_before, add_imports, remove_imports, required_imports, force_to_top.

[tool.pylint.*]

Pylint is a comprehensive static analyzer and linter for Python. See its configuration reference.

Sub-tables follow Pylint’s checker-group order; all rule, name, and path lists are sorted by leaf key name regardless of sub-table.

Sub-table order: main (and legacy alias master) → messages_controlreportsbasicformatdesignclassesexceptionsimportsloggingmethod_argsrefactoringsimilaritiesspellingstringtypecheckvariablesmiscellaneous.

Sorted arrays: enable, disable, load-plugins, extension-pkg-allow-list, extension-pkg-whitelist, ignore, ignore-patterns, ignore-paths, ignored-modules, ignored-classes, ignored-argument-names, good-names, bad-names, logging-modules, valid-classmethod-first-arg, valid-metaclass-classmethod-first-arg, callbacks, additional-builtins, allowed-redefined-builtins, preferred-modules, deprecated-modules, known-third-party, known-standard-library, allowed-modules, expected-line-ending-format, overgeneral-exceptions, defining-attr-methods, exclude-protected. Matching is on the leaf key name regardless of which sub-table it appears in.

[tool.codespell]

codespell checks code and text for common misspellings. See its configuration reference.

Keys are ordered dictionaries → scope → fix behavior → output; word and path lists are sorted.

Key ordering: dictionaries (builtin, dictionary, ignore-words, ignore-words-list, ignore-regex, ignore-multiline-regex, exclude-file) → scope (skip, uri-ignore-words-list, check-filenames, check-hidden, hidden, regex, user-input) → fix behavior (write-changes, interactive, enable-colors, disable-colors) → output (count, quiet-level, summary).

Sorted arrays: builtin, dictionary, skip, ignore-words-list, uri-ignore-words-list.

[tool.docformatter]

docformatter formats Python docstrings to follow PEP 257. See its configuration reference.

Keys are ordered behavior → format width → wrap/summary tweaks → other.

Key ordering: behavior (in-place, recursive, check, diff, black, pep257, non-strict) → format width (line-length, wrap-summaries, wrap-descriptions, tab-width) → wrap/summary tweaks → other.

[tool.interrogate]

interrogate measures docstring coverage of a Python codebase. See its configuration reference.

Keys are ordered threshold → ignore flags → exclude → output; exclude and regex lists are sorted.

Key ordering: threshold → ignore flags → exclude → output.

Sorted arrays: exclude, extend-exclude, ignore-regex.

[tool.check-manifest]

check-manifest checks that MANIFEST.in is complete for an sdist. See its configuration reference.

Keys are ordered ignoreignore-bad-ideasignore-default-rules; both glob lists are sorted.

Key ordering: ignoreignore-bad-ideasignore-default-rules.

Sorted arrays: ignore and ignore-bad-ideas (file-glob lists).

[tool.deptry]

deptry finds unused, missing, and transitive dependencies in Python projects. See its usage reference.

Keys are ordered scope/exclude → ignore rules → per-rule ignores → behavior → mapping; the ignore and path lists are sorted.

Key ordering: scope/exclude → ignore rules → per-rule ignores → behavior → mapping.

Sorted arrays: the ignore_* / exclude / requirements_files / pep621_dev_dependency_groups / known_first_party lists.

[tool.vulture]

Vulture finds unused (dead) Python code. See its configuration reference.

Keys are ordered paths → ignore → behavior → output; path and name lists are sorted.

Key ordering: paths → ignore (exclude, ignore_names, ignore_decorators) → behavior (make_whitelist, min_confidence, sort_by_size) → output (verbose).

Sorted arrays: paths, exclude, ignore_names, ignore_decorators.

[tool.bandit]

Bandit finds common security issues in Python code. See its configuration reference.

Keys are ordered exclude_dirstargetstestsskips → per-plugin sub-tables; all array values are alphabetized.

Key ordering: exclude_dirstargetstestsskips → per-plugin sub-tables (assert_used, hardcoded_tmp_directory, etc.).

Sorted arrays: all array values (rule IDs, directory paths, function-name lists, all set semantics).

[tool.mypy]

mypy is a static type checker for Python. See its configuration reference.

Covers all documented mypy options plus the [[tool.mypy.overrides]] array of tables, reordered to match mypy’s configuration reference; set-semantic arrays are sorted, while plugins and mypy_path are preserved.

Top-level key ordering (sectioned):

  1. Import discovery: mypy_pathfilesmodulespackagesexcludeexclude_gitignorenamespace_packagesexplicit_package_basesignore_missing_importsfollow_untyped_importsfollow_importsfollow_imports_for_stubspython_executableno_site_packagesno_silence_site_packages

  2. Platform configuration: python_versionplatformalways_truealways_false

  3. Disallow dynamic typing: disallow_any_unimporteddisallow_any_exprdisallow_any_decorateddisallow_any_explicitdisallow_any_genericsdisallow_subclassing_any

  4. Untyped definitions and calls: disallow_untyped_callsuntyped_calls_excludedisallow_untyped_defsdisallow_incomplete_defscheck_untyped_defsdisallow_untyped_decorators

  5. None and Optional: implicit_optionalstrict_optional

  6. Configuring warnings: warn_redundant_castswarn_unused_ignoreswarn_no_returnwarn_return_anywarn_unreachabledeprecated_calls_exclude

  7. Suppressing errors: ignore_errors

  8. Miscellaneous strictness: allow_untyped_globalsallow_redefinitionlocal_partial_typesdisable_error_codeenable_error_codeextra_checksimplicit_reexportstrict_equalitystrict_bytesstrict

  9. Configuring error messages: show_error_contextshow_column_numbersshow_error_endhide_error_codesshow_error_code_linksprettycolor_outputerror_summaryshow_absolute_path

  10. Incremental mode: incrementalcache_dirsqlite_cachecache_fine_grainedskip_version_checkskip_cache_mtime_checks

  11. Advanced options: pluginspdbshow_tracebackraise_exceptionscustom_typing_modulecustom_typeshed_dirwarn_incomplete_stubnative_parser

  12. Report generation: any_exprs_reportcobertura_xml_reporthtml_reportlinecount_reportlinecoverage_reportlineprecision_reporttxt_reportxml_reportxslt_html_reportxslt_txt_report

  13. Miscellaneous: junit_xmljunit_formatscripts_are_moduleswarn_unused_configsverbosity

  14. overrides last.

Overrides entry key ordering: in each [[tool.mypy.overrides]] entry, module comes first (required), then per-module overridable keys in the same logical grouping as the parent table (import behavior, platform markers, disallow dynamic typing, untyped defs/calls, optional handling, warnings, suppression, miscellaneous strictness).

Sorted arrays:

  • Top-level: files, modules, packages, exclude, always_true, always_false, untyped_calls_exclude, deprecated_calls_exclude, disable_error_code, enable_error_code.

  • Inside overrides entries: module (when an array of patterns), always_true, always_false, disable_error_code, enable_error_code.

Preserved as written: plugins (run in declared order; reordering changes behavior) and mypy_path (a search path with priority semantics).

Inline-table handling: when [[tool.mypy.overrides]] collapses to overrides = [{...}, {...}] under the default table_format = "short", key order inside each entry is normalized via discriminators unique to mypy (disable_error_code / enable_error_code / ignore_missing_imports / follow_untyped_imports / ignore_errors / warn_unused_ignores / disallow_untyped_defs / check_untyped_defs). The arrays inside each inline entry are sorted in place, so disable_error_code = [...] is alphabetized whether the override is expanded or collapsed.

# Before
[[tool.mypy.overrides]]
ignore_missing_imports = true
disable_error_code = ["import-untyped", "attr-defined"]
module = "third_party.*"

# After
[tool.mypy]
overrides = [
  { module = "third_party.*", ignore_missing_imports = true, disable_error_code = [ "attr-defined", "import-untyped" ] },
]

[tool.pyrefly]

Pyrefly is Meta’s fast Python type checker and language server, written in Rust. See its configuration reference.

Keys follow a fixed platform → paths → behavior → errors order; path arrays are sorted.

Key ordering: python_versionpython_platformpython_interpreterproject_includesproject_excludessearch_pathsite_package_pathuse_untyped_importsreplace_imports_with_anyignore_errors_in_generated_codeerrors.

Sorted arrays: the path arrays.

[tool.pyright] and [tool.basedpyright]

Pyright is Microsoft’s fast Python type checker; basedpyright is a community fork sharing the same schema. See the pyright configuration reference and the basedpyright config-files reference.

Keys are ordered platform → mode flags → paths → strict-flavor toggles → defineConstantreport* rules (alphabetized) → executionEnvironments; path arrays are sorted.

Key ordering:

  1. Platform / interpreter: pythonVersionpythonPlatformpythonPathvenvvenvPathtypeshedPathstubPath

  2. Mode flags: typeCheckingModestrictfailOnWarningsuseLibraryCodeForTypes

  3. Paths: includeexcludeignoreextraPaths

  4. Strict-flavor toggles: strictListInference, strictDictionaryInference, strictSetInference, strictParameterNoneValue, enableExperimentalFeatures, enableTypeIgnoreComments, analyzeUnannotatedFunctions, disableBytesTypePromotions, deprecateTypingAliases

  5. defineConstant

  6. All report* rules, alphabetized

  7. executionEnvironments (last)

The report* rules (70+ in pyright; basedpyright adds more) are collected from the input and inserted alphabetically rather than hardcoded, so new diagnostic rules don’t require formatter changes.

Sorted arrays: include, exclude, ignore, extraPaths, strict.

[tool.ty]

ty is Astral’s fast Python type checker, written in Rust. See its configuration reference.

Keys are ordered srcrespect-ignore-filesenvironmentrulesterminaloverrides; the src array is sorted.

Key ordering: srcrespect-ignore-filesenvironmentrulesterminaloverrides (last).

Sorted arrays: src.

The schema is still pre-1.0; unknown keys are alphabetized after the canonical set.

[tool.pytest.ini_options]

pytest is a feature-rich testing framework for Python. See its configuration reference.

Keys in the ini_options block follow the pytest reference order; set-semantic arrays are sorted, while addopts and pythonpath are preserved.

Key ordering: pytest itself → discovery → CLI arguments → markers/parametrize → warnings → doctest → output → logging (capture / CLI / file) → JUnit XML → cache and tmp_path → assertion / faulthandler.

Sorted arrays (set semantics): testpaths, norecursedirs, collect_ignore, collect_ignore_glob, python_files, python_classes, python_functions, markers, filterwarnings, doctest_optionflags, usefixtures, required_plugins.

Preserved as written: addopts (CLI argv, order matters) and pythonpath (a search path with priority semantics).

# Before
[tool.pytest.ini_options]
log_cli_level = "INFO"
markers = [ "slow: marks tests as slow", "fast: marks tests as fast" ]
addopts = [ "--strict-markers", "-ra" ]
testpaths = [ "tests" ]
minversion = "8"

# After
[tool.pytest]
ini_options.minversion = "8"
ini_options.testpaths = [ "tests" ]
ini_options.addopts = [ "--strict-markers", "-ra" ]
ini_options.markers = [ "fast: marks tests as fast", "slow: marks tests as slow" ]
ini_options.log_cli_level = "INFO"

[tool.coverage]

coverage.py measures code coverage of Python programs. See its configuration reference.

Keys follow coverage.py’s workflow phases (run → paths → report → output formats) with related options kept adjacent; set-semantic arrays are sorted.

Key ordering: coverage.py’s workflow phases:

  1. Run phase (run.*): data collection

    • Source selection: sourcesource_pkgssource_dirs

    • File filtering: includeomit

    • Measurement: branchcover_pylibtimid

    • Execution context: command_lineconcurrencycontextdynamic_context

    • Data management: data_fileparallelrelative_files

    • Extensions: plugins

    • Debugging: debugdebug_filedisable_warnings

    • Other: corepatchsigterm

  2. Paths (paths.*): path mapping between source locations

  3. Report phase (report.*): general reporting

    • Thresholds: fail_underprecision

    • File filtering: includeomitinclude_namespace_packages

    • Line exclusion: exclude_linesexclude_also

    • Partial branches: partial_branchespartial_also

    • Output control: skip_coveredskip_emptyshow_missing

    • Formatting: formatsort

    • Error handling: ignore_errors

  4. Output formats (after report)

    • html.*: directorytitleextra_cssshow_contextsskip_coveredskip_empty

    • json.*: outputpretty_printshow_contexts

    • lcov.*: outputline_checksums

    • xml.*: outputpackage_depth

Related options stay adjacent: include / omit, exclude_lines / exclude_also, partial_branches / partial_also, and skip_covered / skip_empty.

Sorted arrays:

Run phase

source, source_pkgs, source_dirs, include, omit, concurrency, plugins, debug, disable_warnings

Report phase

include, omit, exclude_lines, exclude_also, partial_branches, partial_also

# Before (alphabetical)
[tool.coverage]
report.exclude_also = ["if TYPE_CHECKING:"]
report.omit = ["tests/*"]
run.branch = true
run.omit = ["tests/*"]

# After (workflow order with groupings)
[tool.coverage]
run.branch = true
run.omit = ["tests/*"]
report.omit = ["tests/*"]
report.exclude_also = ["if TYPE_CHECKING:"]

[tool.tox]

tox automates and standardizes testing across multiple Python environments. See its configuration reference.

A [tool.tox] block in pyproject.toml reuses the tox-toml-fmt rules, so it is formatted identically to a standalone tox.toml.

Reuses the rules from tox-toml-fmt: alias normalization (envlistenv_list, setenvset_env, etc.), canonical key ordering for the root table and every env table, PEP 508 requirement normalization and sorting in deps and constraints, sorted pass_env (inline-table entries first), version-aware env_list sorting (py313 before py312 before py311), and inline-table reordering for replace, prefix, product, and value directives.

See the tox-toml-fmt documentation for the full schema and per-key behavior; the only difference here is the namespace (tool.tox instead of the root table).

[tool.bumpversion]

bump-my-version (the successor to bumpversion) updates version strings across files and tags releases. See its configuration reference.

Keys are ordered identity → format → tag → commit → behavior → files / parts.

Key ordering: identity (current_version) → format (parse, serialize, search, replace, regex, ignore_missing_*) → tag (tag, sign_tags, tag_name, tag_message) → commit (allow_dirty, commit, commit_args, message, moveable_tags) → behavior → files / parts (arrays of tables, last).

[tool.commitizen]

Commitizen enforces conventional commits and automates version bumps and changelogs. See its configuration reference.

Keys are ordered rule selection → version source → bump behavior → tag/sign → changelog → hooks → customize.

Key ordering: rule selection (name, schema, schema_pattern, allowed_prefixes) → version source (version, version_scheme, version_provider, version_files) → bump behavior → tag/sign → changelog → hooks (pre_bump_hooks, post_bump_hooks) → customize.

Sorted arrays: version_files, allowed_prefixes, extras, extra_files.

[tool.semantic_release]

python-semantic-release automates versioning and releases from commit history. See its configuration reference.

Keys are ordered tag/version → assets → version source → repo → commit parser → branches → publish → changelog → remote; version and asset lists are sorted.

Key ordering: tag/version → assets → version source → repo → commit parser → branches → publish → changelog → remote.

Sorted arrays: version_variables, version_toml, assets, exclude_commit_patterns.

[tool.towncrier]

towncrier builds release notes from news-fragment files. See its configuration reference.

Keys are ordered package identity → news location → rendering → behavior → type / section; the ignore glob list is sorted, while changelog display order is preserved.

Key ordering: package identity (name, version, package, package_dir) → news location (directory, filename, start_string, template, title_format, issue_format, underlines) → rendering (wrap, all_bullets, single_file, orphan_prefix, create_eof_newline, create_add_extension) → behavior (ignore) → type and section (arrays of tables, last).

[[tool.towncrier.type]] entries get keys ordered directorynameshowcontent; [[tool.towncrier.section]] entries get pathnameshowcontent. Array order is preserved (display order in the rendered changelog).

Sorted arrays: ignore (file globs to skip).

Other Tables

Any unrecognized tables are preserved and reordered according to standard table ordering rules. Keys within unknown tables are not reordered or normalized. Requires-Dist: tomli>=2.4.1; python_version<’3.11’

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyproject_fmt-2.23.0.tar.gz (278.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyproject_fmt-2.23.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.23.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded PyPymacOS 11.0+ ARM64

pyproject_fmt-2.23.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

pyproject_fmt-2.23.0-cp315-cp315t-musllinux_1_2_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ x86-64

pyproject_fmt-2.23.0-cp315-cp315t-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ ARM64

pyproject_fmt-2.23.0-cp315-cp315t-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.23.0-cp315-cp315t-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ ARM64

pyproject_fmt-2.23.0-cp315-cp315t-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

pyproject_fmt-2.23.0-cp315-cp315t-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.15tmacOS 10.12+ x86-64

pyproject_fmt-2.23.0-cp314-cp314t-win_arm64.whl (4.8 MB view details)

Uploaded CPython 3.14tWindows ARM64

pyproject_fmt-2.23.0-cp314-cp314t-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.14tWindows x86-64

pyproject_fmt-2.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

pyproject_fmt-2.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

pyproject_fmt-2.23.0-cp314-cp314t-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.23.0-cp314-cp314t-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

pyproject_fmt-2.23.0-cp314-cp314t-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

pyproject_fmt-2.23.0-cp314-cp314t-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

pyproject_fmt-2.23.0-cp313-cp313t-win_arm64.whl (4.8 MB view details)

Uploaded CPython 3.13tWindows ARM64

pyproject_fmt-2.23.0-cp313-cp313t-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.13tWindows x86-64

pyproject_fmt-2.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

pyproject_fmt-2.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

pyproject_fmt-2.23.0-cp313-cp313t-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ x86-64

pyproject_fmt-2.23.0-cp313-cp313t-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

pyproject_fmt-2.23.0-cp313-cp313t-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

pyproject_fmt-2.23.0-cp313-cp313t-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.13tmacOS 10.12+ x86-64

pyproject_fmt-2.23.0-cp310-abi3-win_arm64.whl (4.8 MB view details)

Uploaded CPython 3.10+Windows ARM64

pyproject_fmt-2.23.0-cp310-abi3-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.10+Windows x86-64

pyproject_fmt-2.23.0-cp310-abi3-musllinux_1_2_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

pyproject_fmt-2.23.0-cp310-abi3-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_31_riscv64.whl (5.2 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.31+ riscv64

pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

pyproject_fmt-2.23.0-cp310-abi3-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

pyproject_fmt-2.23.0-cp310-abi3-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file pyproject_fmt-2.23.0.tar.gz.

File metadata

  • Download URL: pyproject_fmt-2.23.0.tar.gz
  • Upload date:
  • Size: 278.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyproject_fmt-2.23.0.tar.gz
Algorithm Hash digest
SHA256 893215f9d9ac9deab5e549d051db6d6d8b7102724697f8a9870b17895cf6ca9c
MD5 9d7ff25571fbd03457b636191d44f96f
BLAKE2b-256 04a66f22eb43c2ae8d151ee51a26313df16ebd6d9e77b34c63f8fd9086f4c45a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0.tar.gz:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 15ce14cac13a54d17aee8e04eee6661e380155eb3da9c14e8b2455b85a56af68
MD5 dfef455683f7e2af75d9147fb995430e
BLAKE2b-256 cc42a30cd197997f651c682b67496f66551aafe2b0fa39db012b799a6bca7108

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 747b3f1900a4e45ea6f9a0bbaea0d01be9774ac178906ddd2921573062071f26
MD5 563d8c4016bc0d2bc8b952f383beeb2b
BLAKE2b-256 b72f3f6b7780b61ff5e574f0f0e5bfbbe08aa9547a2e13f80e5fd153a2ede626

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c9b7c605974150a14e1fe569432c800933aa189e6ef5e0e22bb172d989c0223e
MD5 3a99390de400d50adffdeada4a3cec1c
BLAKE2b-256 c4b6a656778bb9207f27f63359071541aa7f95cf7369afd88343d76b869c7dbd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp315-cp315t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9cee010e37fd81f9d7a81663d822b495c5044397eaa4ccedcd983c46cf50377c
MD5 a3e3ee108cea712bf2618ec580889fbe
BLAKE2b-256 9d19580d53421d10e14fda60796c3c7ee43b06cf688455d874607c5da076f46b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp315-cp315t-musllinux_1_2_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp315-cp315t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp315-cp315t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7568110e8f51b29bed840aac910c03ac2087b8f6ee7a2254d0da25aa3fb59771
MD5 698c312fb36c4a1092e6c62ac8d8a551
BLAKE2b-256 4729bb29305786ce9c71c51774292e268d12aa3c2ba090bd594440bcf1518f37

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp315-cp315t-musllinux_1_2_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp315-cp315t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp315-cp315t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6b8d40f0b13ac4ab1a5a07f02d85df4553810201db77fc675eb61358f414d937
MD5 22eee29302910eb2288ebdf45f721b33
BLAKE2b-256 5994adf908f952c9c5ea298623bc29a6727347a90fc48fdcdde9cf2215c50e1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp315-cp315t-manylinux_2_28_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp315-cp315t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp315-cp315t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c8c9cea05fbbfe7cf2be3ece0a1cae75da1ea6a0982766abf83044427ceaa26d
MD5 aa784f24fc7e0d1691b705a294b1ed3d
BLAKE2b-256 8eab0ecb8739125185a8cbb51fca6c7b1b74e65de09f2d8be0f8619f00ef777c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp315-cp315t-manylinux_2_28_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp315-cp315t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 74153f08e64651206286efc6871c4da8c89360ca7f8651fe5c92cb6385f83ed9
MD5 df775f753a499a22476ed8ea493c17f2
BLAKE2b-256 e4c1fbd07d5b4ae9daceb19c7ee39488c4b55d57026699e30a35ab6d561b6c0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp315-cp315t-macosx_11_0_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp315-cp315t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp315-cp315t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2df4d1a3ead6f235cd208f454b0bab0656e693cebed332612526148f7ee21324
MD5 185743b46627a585f0e6b8cb6804be95
BLAKE2b-256 b0c900843579b5db4b41f12042c2f09191768439121b645ebae0cca66e7e4b8f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp315-cp315t-macosx_10_12_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp314-cp314t-win_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 7e0813432ac38e55b94f24956e51d91fc340310adbc3b96c8cfa751df31d1404
MD5 6dc1ea3530ff2012e1d479699beadb8a
BLAKE2b-256 f1710ad901972d9e810aa086ee10c9c4bd96aab08c9e71ec3e2cb9cd7a83f303

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp314-cp314t-win_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 32b299d5ee2bb5752da558dd475e44726e956111ec18c7bf16cba8d050d211b0
MD5 15f96bf621ece316dcacbb5298a3ca58
BLAKE2b-256 17f2461632330e991f73abfb6f62fb280a1a4d49a38fcad67ac395dd90570001

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp314-cp314t-win_amd64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 623354f81291bc884e81069792955193679a0af43d4cc1cf1af59d1eb5fa7386
MD5 65a068f2f6b8a74fc5241f729ac7233a
BLAKE2b-256 681a8be4ec2d1e87d42f85cfa1ed0163c61af07a4d22468513d79e88ea1a6127

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7803f35c636591220f582bd3ffb555acfc9d86ca82ec08ce10623d0d57550de2
MD5 bee5aaa1afaced56775968988f263479
BLAKE2b-256 3fd00611ad78ed69bacfc9eef385f6ba48869f8c62f8f0c0c9fda0db1b2edf04

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ad0901a7aeff0ad11c382152ce5bdccfd8103c85349526eb194cd976d38b0bca
MD5 e03a33b4e73498e0b79f61290db702b7
BLAKE2b-256 af6803816e736d8b90a2872028db4439497c1893d3d5cbfc80507b30dffdb5a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp314-cp314t-manylinux_2_28_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1177acf2c5e5d99d8a1bf5227036c91ab347e39cdd42a11068b3162b825c7215
MD5 c8c82c73c83d7fedfacb7030edabc213
BLAKE2b-256 6ff2b56f647a3f2c52c6402e07bc99776e8dbc7bf52a6d6acd9e4f209ab5c438

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp314-cp314t-manylinux_2_28_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ebadbbc634ac381ef9fe6c1b9fbbaa1e393e81092249e151065a44e9fa80c322
MD5 d8539187c1ed89d2b039ca2d7d61ff75
BLAKE2b-256 105a2abff23b627b50c222e383efa83bac5b17be6895cb7ab2628b12a56e59e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp314-cp314t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9bff7f42f699a7d7ae4cfd9f7c0f3638998a2d6313cb05b24de8e7e8c47a185a
MD5 7aa90bcac130fb14b829a056502c79e6
BLAKE2b-256 2e0f5089ddf3e06765711d24a2d031cc658a84ce658bbb02ae3117b7c33501fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp314-cp314t-macosx_10_12_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp313-cp313t-win_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 e5000e3c5e0c93748e364ddeb228710c8052862f1aacfad475f0497f4f5f73cc
MD5 08a87de37e1a74decf80a768c9e5e462
BLAKE2b-256 65585a217161be7f7c2723fc6ccd70b249bfc1a7dea9f0acab103f7068f34c77

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp313-cp313t-win_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp313-cp313t-win_amd64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 25e01dc6876fe9da0c0380f291c7234685e3214431b2dac6cc2bc62d1f896244
MD5 923938d110972cee948e25350fbc4d65
BLAKE2b-256 fbf2c83b2fb7a58e02fc90af4af1f2b7ffc08ab351dbbe1965c620b3ed32ff5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp313-cp313t-win_amd64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6565c7bf05ed3a737ab0ab41fd18c33c9c7ea03f049a0a2558135dbe17d72d9e
MD5 9d60cb82113860fbf96a1e541dfb79c5
BLAKE2b-256 19fd58d24235e4e661261f1118bb994458891a01e2779098f3d0d6c089e6b7c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 73a94faa18917d0103c6cb228b419484ca1d0b58a786909f8b21f0a15791ba32
MD5 303c4788dac8c6c200a1958cd9075dbb
BLAKE2b-256 7d262de5e89a8a6e7f4bae66e917bc6d3e112f4e6e14c5bf3c7dd923f14c3c7b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp313-cp313t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp313-cp313t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 83d0569e24891f1e19dbbe305475a294e1e04f7ebe3578286c5fb07cf763d79a
MD5 cf359963ad1ed8f9bc5656e7890eff25
BLAKE2b-256 6d9e0ec445447f691e60fb35e6809e563c9231a5173f5761a0f76f566d713e89

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp313-cp313t-manylinux_2_28_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp313-cp313t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b1fb0f5cf73e020a773a32950a496293141facfb0f918bdea54d31f1d78bb466
MD5 0b7f4dedbe2a452d03620f81bfdaea7a
BLAKE2b-256 fc22f8e90dfda84449ec92f3494baf0cd98e7452754c8831fe143143a6895253

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp313-cp313t-manylinux_2_28_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40f59cf623e57463afeebfc9cd9b3e3691f87ae627cc8096c9f3edd4755fb219
MD5 5c803cb70f411ba384319514612f3104
BLAKE2b-256 a882c80ca4d5fb881016633f359d0d3f97f64eb1c186a749e9b27a37651b9d32

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp313-cp313t-macosx_11_0_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp313-cp313t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp313-cp313t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0a958bbe5be12aa18ad48dcb8b51ce81fabf403121f496d1f0d3c9451a77ffc9
MD5 77573e61de5471468de789e5f447317b
BLAKE2b-256 9db5cc1d90322e0e376f03083952e1c65ab190cc2173fe2def1a4bddc9f2748a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp313-cp313t-macosx_10_12_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp310-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 3ed0e36caccbf3955dbd5a5cc83862b331acb5e07db1ef31e11f647d88dbeccc
MD5 5a2d7b327c45d992b64acc4828bedb8d
BLAKE2b-256 b372248d94c639ade7d6aa7e5b03f3cce1d28b597c6facacb5795bcaa8985854

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp310-abi3-win_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 bbc60a00a599b556ed9ad824a6e541d7f0854848a33d710a413bbb8dfd25d807
MD5 23b0cb5bfd8d49096b29f6c71459c34c
BLAKE2b-256 fc97fbc02877ebdb14d413ab2a1660ee098d1967cf3bb60a837828f625925eb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp310-abi3-win_amd64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0346ffb4d77804de68512ce82c3212ded49faedfe2eee6c5c27c2a0be76f23b0
MD5 99d027ac626f580eae976fa556574bb7
BLAKE2b-256 258b27e344adf8c70137966c5e21b7766255fd8750950ce74540627dcc7c5ab7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp310-abi3-musllinux_1_2_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b2e7b92ac9e9d56243b10ffb61a68ea5270494efdac96310bea0996de7c11d97
MD5 c633434ab671689dff0d1d0c9e4ad4c3
BLAKE2b-256 406bc9699264d80beae249925393f9afd0e95beaa0b7c9bba69d5b925c0c0752

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp310-abi3-musllinux_1_2_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_31_riscv64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_31_riscv64.whl
Algorithm Hash digest
SHA256 4f34d510fddc49f523ca59065910c479b3e8343a8d3d32201d3b59b0d788c0bc
MD5 01b82be75c9b45f0d349b00c46398fa6
BLAKE2b-256 734a7c1abb0542e4d528d52b30ddadd745e87a110dae827c0ba8179a4a3df5e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_31_riscv64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 99d4e4b86ec8d1f20af53f16245a784dff55f03a7e2e5c57874cf562ec2a53f3
MD5 2a49892fd34c38e2ca889a019111e54a
BLAKE2b-256 a2398f99b0e088f88a358105b823379089755c9660da24d037cd0ff5e09d36d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_28_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ddb22be85ea040ef453bd97de2827ec3d9a5d2ee1b174cdd9a748ef785ab0659
MD5 be94e1edf581d2b3028e9b4f3ad27b31
BLAKE2b-256 677c9672a8e1ad55c7919c10b6575df8bce63cdc332ed572355606bb3f322adb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp310-abi3-manylinux_2_28_aarch64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 202b16f7f7ce8ad3aa54ae17a522de8743e5eefd624f03c99960ab58597d6477
MD5 e97110208b0dccb3c1a7ea6decad385b
BLAKE2b-256 934ba89594d446597721e0432f28688eb0f10a899e4c2f2c9fd6e028748e382a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyproject_fmt-2.23.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyproject_fmt-2.23.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 166e614213fa8cd867218261da1147ccc4f3087370fa187b10c3df23153e5b5c
MD5 e758c61ef8f9df5e90cd92d6764fb15a
BLAKE2b-256 473ac8b83d4b27f0aeb8dedb68c6388b7d05e9e805d85344deada1cefa12abd8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyproject_fmt-2.23.0-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: pyproject_fmt_build.yaml on tox-dev/toml-fmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page