Как написать минимально рабочий файл pyproject.toml, который может устанавливать пакеты?

Пип поддерживает pyproject.tomlfile, но до сих пор все практическое использование новой схемы требует стороннего инструмента, который автоматически генерирует эти файлы (например, поэзия и pip). в отличие setup.py который уже доступен для написания человеком, pyproject.toml нет (пока).

Из документации setuptools,

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

Однако этот файл не включает зависимости пакетов (как это не должно быть в PEP518, который имеет дело только с зависимостями сборки). Pip поддерживает установку пакетов с помощью pyproject.toml но нигде pep не указывает, как писать зависимости пакетов в pyproject.toml для официальной системы сборки setuptools.

Как мне написать зависимости пакетов в pyproject.toml?


Связанные вопросы по Stackru:

  • Как запустить файл pyproject.toml

    В этом вопросе запрашивается метод автоматического создания pyproject.toml, мой вопрос отличается, потому что я прошу написанное человеком pyproject.toml.

1 ответ

Все эти файлы доступны для записи. Здесь я отвечу по поводу setuptools (позже был добавлен раздел для поэзии). Но важно знать, что в этом контексте setuptools называется бэкэндом сборки, и сегодня доступно несколько таких бэкэндов, setuptools - лишь один из них. Другие движки сборки включают в себя поэзию, Флит, люк, pymsbuild, ДПМ и многое другое. Некоторые из них ожидают, что их конфигурация (включая зависимости) будет написана на pyproject.toml, некоторые ожидают его в другом файле.

Через несколько дней (декабрь 2020 г.) существует стандарт (PEP621), в котором указано, как метаданные проекта (включая зависимости) должны быть представлены в pyproject.tomlфайл. Но насколько мне известно, пока что ни один инструмент не внедрил его, для этого явно рано.


setuptools

На сегодняшний день (октябрь 2020 г.) setuptools не поддерживает запись своей конфигурации в pyproject.toml. Вам все равно нужно написать setup.py, или setup.cfgили их комбинацию.

Я рекомендую писать как можно больше в setup.cfg, а setup.py может быть всего лишь:

       import setuptools
setuptools.setup()

Такой setup.cfg может выглядеть так:

       [metadata]
name = Thing
version = 1.2.3

[options]
install_requires =
    SomeLibrary ~= 2.2
packages = find:

Ссылки о зависимостях в частности:

Кроме того, обратите внимание, что в некоторых случаях можно опустить setup.py файл целиком, одним из условий является то, что setup.cfg файл и pyproject.tomlфайл присутствуют и содержат всю необходимую информацию. Вот пример pyproject.tomlэто хорошо работает для бэкэнда сборки setuptools:

       [build-system]
build-backend = 'setuptools.build_meta'
requires = [
    'setuptools >= 43.0.0',
]

Наконец, специалисты по сопровождению setuptools планируют разрешить запись конфигурации в pyproject.toml (вместо setup.cfg или же setup.py), но мы еще не там (октябрь 2020 г.).


поэзия

В поэзии все определяется в pyproject.toml.

Этот файл можно написать от руки. Насколько я могу судить, нет строгой необходимости когда-либо явно устанавливать саму поэзию (такие команды, как pip install и pip wheel может уйти достаточно далеко).

В pyproject.toml файл может быть таким простым, как:

       [tool.poetry]
name = 'Thing'
version = '1.2.3'

[tool.poetry.dependencies]
python = '^3.6'
SomeLibrary = '~2.2'

[build-system]
requires = ['poetry-core~=1.0']
build-backend = 'poetry.core.masonry.api'

Ссылки:

Другие вопросы по тегам