Как написать минимально рабочий файл pyproject.toml, который может устанавливать пакеты?
Пип поддерживает
pyproject.toml
file, но до сих пор все практическое использование новой схемы требует стороннего инструмента, который автоматически генерирует эти файлы (например, поэзия и pip). в отличие
setup.py
который уже доступен для написания человеком,
pyproject.toml
нет (пока).
[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:
Ссылки о зависимостях в частности:
- https://setuptools.readthedocs.io/en/latest/userguide/dependency_management.html
- https://www.python.org/dev/peps/pep-0508/
- https://www.python.org/dev/peps/pep-0440/
Кроме того, обратите внимание, что в некоторых случаях можно опустить
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'
Ссылки: