Con la seguente struttura del pacchetto
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
Contenuti di setup.py
from setuptools import setup
setup()
Contenuti di setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
Posso costruire una ruota o una distribuzione sorgente per my_package
questo
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
Ma secondo il manutentore di setuptools , una configurazione di build dichiarativa è l'ideale e l'uso di una build imperativa sarà un odore di codice. Quindi sostituiamo setup.py
con pyproject.toml
:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
Contenuti di pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
E puoi ancora costruire una ruota come prima, funziona. Ma sdist non funziona:
python: can't open file 'setup.py': [Errno 2] No such file or directory
Quindi, come dovresti effettivamente creare il file .tar.gz usando setuptools ? Qual è lo strumento rivolto all'utente per creare sdist? Non voglio cambiare il backend di build. Sembra che tutti gli altri strumenti di packaging scrivano tutti i propri punti di ingresso della build, ma ho pensato che il punto fondamentale della definizione di un sistema di build dichiarativo nei metadati fosse in modo che non fosse necessario fare pratica con il sistema di build, imparando come ciascuno diversi strumenti di packaging si aspettano di essere invocati o di dover accedere all'interprete e chiamare manualmente un'API Python. Ma il PEP per i requisiti di sistema di build ha ormai più di 2 anni. Mi sto perdendo qualcosa di ovvio qui?
Come creare una distribuzione di origine senza utilizzare il setup.py
file?
pep517.build
che si intende solo come un esperimento, una stampella temporanea quando ci sono strumenti produttivi come flauto, poesia, tratteggio e probabilmente anche di più?