понедельник, 2 июня 2025 г.

pyproject.toml, Giga, Python. Code Format, Tools

pyproject.toml, Giga, Python. Code Format, Tools

https://giga.chat/link/gcsObBTGeV

Файл pyproject.toml стал де-факто стандартом в мире Python благодаря поддержке его в спецификациях PEP 518 и PEP 517.

Изначально созданный для упрощения и автоматизации процесса сборки Python-приложений,

теперь он активно применяется для задания большинства аспектов управления проектом, включая сборку, тестирование,

документацию и даже публикации пакетов.

Основные секции и возможности pyproject.toml

1. [build-system]

Задает общие инструкции по сборке проекта. Включает список обязательных зависимостей для инструментов сборки и backend,

используемый для сборки (обычно это setuptools.build_meta).

Например:

[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"

2. [tool.<name>]

Эта секция предназначена для конфигурирования сторонних инструментов, поддерживающих TOML-конфигурацию.

Она чрезвычайно полезна для различных задач:

  • Poetry: Конфигурирует проект для менеджера зависимостей и упаковки poetry.
[tool.poetry]
name = "awesome-proj"
version = "0.1.0"
description = "An awesome project"
authors = ["John Doe <john@doe.org>"]
license = "MIT"
Hatch: Использовать Hatch для управления жизненным циклом проекта.
[tool.hatch.build]
versions = ["standard"]
targets = { wheel = {} }
Flake8, Black, isort: 
Хранят конфигурационные параметры для инструментов проверки качества кода и форматирования.
[tool.black]
line-length = 88
target-version = ['py37', 'py38']

3. [project]

Эта секция появилась позже и была введена в рамках PEP 621,

предназначенного для замены устаревших методов задания метаданных проекта

(таких как setup.py или старые версии setup.cfg).

Здесь хранится информация о самом проекте, такая как название, версия, авторство, лицензия

и многое другое:

[project]
name = "cool-package"
version = "0.1.0"
description = "This is a cool package!"
authors = [
    { name="Alice", email="alice@example.com" },
    { name="Bob", email="bob@example.com" }
]
license = { file = "LICENSE" }
classifiers = [
    "Programming Language :: Python",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent"
]
dependencies = [
    "requests >= 2.25.0",
    "beautifulsoup4 >= 4.9.0"
]
optional-dependencies = {
    dev = ["pytest", "mypy"],
    doc = ["Sphinx", "sphinx-autodoc-typehints"]
}

4. Другие полезные поля

Помимо вышеперечисленных секций, pyproject.toml поддерживает также дополнительную функциональность:

  • Определение динамических значений (например, извлечение версии из модуля);
  • Управление окружением и системой сборки (например, настройки тестирования, покрытия, документации);
  • Дополнительная поддержка любых инструментов, соответствующих спецификации TOML (через секцию [tool.*]).

Почему pyproject.toml популярен?

  • Декларативность:
  • Информации больше не требуется писать вручную в setup.py (Python-код),
  • а просто записывать её в обычный TOML-файл.
  • Стандартизация:
  • Спецификация рекомендована самим сообществом Python и
  • внедряется всеми ведущими инструментами сборки и управления зависимостями.
  • Унификация:
  • Поддержка широкого спектра инструментов (Poetry, Flit, Hatch, Setuptools и других) делает его универсальным решением.

Таким образом,

файл pyproject.toml сейчас считается одним из ключевых компонентов любой современной системы сборки Python-программ

и используется практически повсеместно для предоставления информации о проекте,

управлении зависимостями и конфигурировании сборки.

Комментариев нет:

Отправить комментарий