Con la siguiente estructura de paquete
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
Contenido de setup.py
from setuptools import setup
setup()
Contenido de setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
Puedo construir una rueda o una distribución de origen para my_package
esto
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
Pero de acuerdo con el mantenedor de setuptools , una configuración de compilación declarativa es ideal y usar una compilación imperativa será un olor a código. Entonces reemplazamos setup.py
con pyproject.toml
:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
Contenido de pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
Y aún puede construir una rueda de la misma manera que antes, funciona. Pero sdist no funciona:
python: can't open file 'setup.py': [Errno 2] No such file or directory
Entonces, ¿cómo debería realmente construir el archivo .tar.gz usando setuptools ? ¿Cuál es la herramienta orientada al usuario para crear sdist? No quiero cambiar el backend de compilación. Parece que otras herramientas de empaque escriben sus propios puntos de entrada de compilación, pero pensé que el objetivo de definir un sistema de compilación declarativo en los metadatos era para que no tuvieras que ponerte en práctica con el sistema de compilación, aprendiendo cómo cada uno diferente herramienta de empaquetado espera ser invocada o tener que ingresar al intérprete y llamar a una API de Python manualmente. Pero el PEP para los requisitos del sistema de construcción tiene más de 2 años. ¿Me estoy perdiendo algo obvio aquí?
¿Cómo construir una distribución fuente sin usar el setup.py
archivo?
pep517.build
que solo se entiende como un experimento, una muleta temporal cuando hay herramientas productivas como revoloteo, poesía, escotilla y probablemente aún más?