Avec la structure de package suivante
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
Contenu de setup.py
from setuptools import setup
setup()
Contenu de setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
Je peux construire une roue ou une distribution source my_package
comme celle-ci
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
Mais selon le responsable de setuptools , une configuration de construction déclarative est idéale et l'utilisation d'une construction impérative va être une odeur de code. Nous remplaçons donc setup.py
par pyproject.toml
:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
Contenu de pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
Et vous pouvez toujours construire une roue de la même manière qu'auparavant, cela fonctionne. Mais sdist ne fonctionne pas:
python: can't open file 'setup.py': [Errno 2] No such file or directory
Alors, comment devez-vous réellement créer le fichier .tar.gz à l' aide de setuptools ? Quel est l'outil accessible à l'utilisateur pour créer sdist? Je ne veux pas changer le backend de build. Il semble que d'autres outils de conditionnement écrivent tous leurs propres points d'entrée de génération, mais je pensais que l'intérêt de définir un système de génération déclaratif dans les métadonnées était de sorte que vous n'ayez pas à vous familiariser avec le système de génération, en apprenant comment chacun un outil de packaging différent s'attend à être appelé ou à devoir aller dans l'interpréteur et appeler une API Python manuellement. Mais le PEP pour les exigences du système de construction a maintenant plus de 2 ans. Suis-je en train de manquer quelque chose d'évident ici?
Comment construire une distribution source sans utiliser de setup.py
fichier?
pep517.build
ce qui ne se veut qu'une expérience, une béquille temporaire lorsqu'il existe des outils productifs tels que le flit, la poésie, la trappe, et probablement encore plus?