Со следующей структурой пакета
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
Содержание setup.py
from setuptools import setup
setup()
Содержание setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
Я могу построить колесо или источник распределения для my_package
этого
pip wheel --no-deps -w dist .
# generates file ./dist/my_package-0.1-py3-none-any.whl
python setup.py sdist
# generates file ./dist/my_package-0.1.tar.gz
Но, по словам сопровождающего setuptools , декларативная конфигурация сборки идеальна, и использование императивной сборки будет пахнуть кодом. Поэтому мы заменим setup.py
на pyproject.toml
:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
Содержание pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
И вы все равно можете построить колесо так же, как и раньше, это работает. Но sdist не работает:
python: can't open file 'setup.py': [Errno 2] No such file or directory
Так как же вам на самом деле собрать файл .tar.gz с помощью setuptools ? Что такое инструмент для создания sdist? Я не хочу менять бэкэнд сборки. Похоже, что все другие инструменты упаковки пишут свои собственные точки входа в сборку, но я думал, что весь смысл определения декларативной системы сборки в метаданных заключается в том, чтобы вам не приходилось практиковаться в системе сборки, изучая, как каждый другой инструмент упаковки ожидает вызова или необходимости входить в интерпретатор и вызывать Python API вручную. Но PEP для требований к системе сборки уже более 2 лет. Я что-то упускаю здесь очевидное?
Как построить исходный дистрибутив без использования setup.py
файла?
pep517.build
что подразумевается только в качестве эксперимента, временной опоры, когда появляются такие продуктивные инструменты, как порхание, поэзия, люк и, возможно, даже больше?