З наступною структурою пакету
.
├── 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? Я не хочу змінювати бекенд збірки. Схоже, що інші інструменти упаковки пишуть власні точки введення збірки, але я подумав, що весь сенс у визначенні декларативної системи збирання в метаданих був таким, що вам не доведеться брати до рук систему збирання, вивчаючи, як кожен різний інструмент упаковки очікує, що буде викликано або потрібно буде перейти до інтерпретатора та викликати API Python вручну. Але PEP для системних вимог до збірки вже понад 2 роки. Я пропускаю тут щось очевидне?
Як побудувати розподіл джерела без використання setup.py
файлу?
pep517.build
що мається на увазі лише як експеримент, тимчасова милиця, коли є продуктивні інструменти, такі як фліт, поезія, хетч і, мабуть, навіть більше?