Mit folgender Paketstruktur
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
Inhalt von setup.py
from setuptools import setup
setup()
Inhalt von setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
Ich kann für Rad oder eine Quelldistribution bauen my_package
wie diese
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
Laut dem Betreuer von setuptools ist eine deklarative Build-Konfiguration jedoch ideal und die Verwendung eines imperativen Builds wird ein Code-Geruch sein. So ersetzen wir setup.py
mit pyproject.toml
:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
Inhalt von pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
Und Sie können ein Rad immer noch so bauen wie zuvor, es funktioniert. Aber sdist funktioniert nicht:
python: can't open file 'setup.py': [Errno 2] No such file or directory
Wie sollten Sie die .tar.gz-Datei mit setuptools erstellen ? Was ist das benutzerbezogene Tool zum Erstellen von SDIST? Ich möchte das Build-Backend nicht ändern. Es sieht so aus, als ob andere Verpackungswerkzeuge alle ihre eigenen Build-Einstiegspunkte schreiben, aber ich dachte, der Sinn der Definition eines deklarativen Build-Systems in den Metadaten bestand darin, dass Sie sich nicht mit dem Build-System vertraut machen mussten, um zu lernen, wie die einzelnen Tools erstellt wurden Es wird erwartet, dass ein anderes Verpackungstool aufgerufen wird oder in den Interpreter gehen und eine Python-API manuell aufrufen muss. Der PEP für Build-Systemanforderungen ist jetzt über 2 Jahre alt. Vermisse ich hier etwas Offensichtliches?
Wie erstelle ich eine Quelldistribution ohne setup.py
Datei?
pep517.build
was nur als Experiment gedacht ist, als temporäre Krücke, wenn es produktive Werkzeuge wie Flit, Poesie, Luke und wahrscheinlich noch mehr gibt?