pyproject.toml setup.cfg

Слайд 2C: Конфигурационные файлы пакета

Конфигурационные файлы Python-пакетов

pyproject.toml - основной файл конфигурации

Новый стандарт конфигурации Python-пакетов, заменяющий setup.py. Определяет:

  • Как собирать пакет
  • Основные метаданные
  • Зависимости
  • Инструменты сборки

1. Базовая структура pyproject.toml:

[build-system]
# Что нужно для сборки пакета
requires = ["setuptools>=45", "wheel"]
build-backend = "setuptools.build_meta"

[project]
# Основные метаданные пакета
name = "genshin-tools"
version = "0.1.0"
description = "Инструменты для расчётов в Genshin Impact"
readme = "README.md"
requires-python = ">=3.8"
license = {text = "MIT"}
authors = [
    {name = "Your Name", email = "your.email@example.com"}
]

# Зависимости пакета
dependencies = [
    "numpy>=1.20",
    "pandas>=1.3.0",
]

[project.optional-dependencies]
# Дополнительные зависимости
test = ["pytest>=6.0"]
dev = ["black", "flake8"]

[project.urls]
# Ссылки на ресурсы проекта
Homepage = "https://github.com/username/genshin-tools"
Documentation = "https://genshin-tools.readthedocs.io"

2. setup.cfg - дополнительная конфигурация:

[metadata]
# Дополнительные метаданные
description-file = README.md
long_description_content_type = text/markdown

[options]
# Настройки пакета
package_dir =
    = src
packages = find:
python_requires = >=3.8

[options.packages.find]
# Где искать пакеты
where = src

[tool:pytest]
# Настройки для тестов
testpaths = tests
python_files = test_*.py
addopts = --verbose

3. Зависимости и их версионирование:

[project.dependencies]
numpy = ">=1.20,<2.0"     # От 1.20 до 2.0
pandas = "~=1.3.0"        # Совместимые с 1.3.0 (1.3.*)
requests = "==2.26.0"     # Только версия 2.26.0
matplotlib = ">=3.4"      # 3.4 или выше

[project.optional-dependencies]
# Группы дополнительных зависимостей
visualization = [
    "plotly>=5.0.0",
    "seaborn>=0.11.0",
]
dev = [
    "pytest>=6.0",
    "black>=21.0",
    "mypy>=0.910",
]

Важно помнить:

  • pyproject.toml - современный стандарт, предпочтительнее setup.cfg
  • Версии зависимостей лучше указывать явно
  • Используйте optional-dependencies для необязательных функций
  • Конфигурация должна быть минимально необходимой

Задача: Конфигурация пакета для артефактов

Создайте конфигурационные файлы для пакета работы с артефактами:

Подсказка: Пример базовой структуры:

[project]
name = "genshin-artifacts"
version = "0.1.0"
description = "Анализатор артефактов для Genshin Impact"

dependencies = [
    "pandas>=1.3.0",
]

[project.optional-dependencies]
viz = ["plotly>=5.0.0"]
dev = ["pytest>=6.0"]