Z następującą strukturą pakietu
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
Zawartość setup.py
from setuptools import setup
setup()
Zawartość setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
Mogę zbudować koło lub dystrybucję źródła dla my_package
tego typu
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
Jednak według opiekuna setuptools konfiguracja kompilacji deklaratywnej jest idealna, a użycie kompilacji rozkazowej będzie zapachem kodu. Więc zastąpić setup.py
z pyproject.toml
:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
Zawartość pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
I nadal możesz zbudować koło w taki sam sposób, jak wcześniej, działa. Ale sdist nie działa:
python: can't open file 'setup.py': [Errno 2] No such file or directory
Jak więc właściwie zbudować plik .tar.gz za pomocą setuptools ? Jakie narzędzie do tworzenia sdist jest przeznaczone dla użytkownika? Nie chcę zmieniać backendu kompilacji. Wygląda na to, że wszystkie inne narzędzia do pakowania zapisują własne punkty wejścia kompilacji, ale pomyślałem, że cały sens definiowania deklaratywnego systemu kompilacji w metadanych polegał na tym, że nie trzeba było wchodzić w interakcję z systemem budowania, ucząc się, jak każdy inne narzędzie do pakowania oczekuje na wywołanie lub konieczność wejścia do interpretera i ręcznego wywołania API Pythona. Ale PEP dla wymagań systemowych kompilacji ma już ponad 2 lata. Czy brakuje mi czegoś oczywistego?
Jak zbudować dystrybucję źródłową bez użycia setup.py
pliku?
pep517.build
czymś, co ma być tylko eksperymentem, chwilową kulą, gdy istnieją produktywne narzędzia, takie jak flit, poezja, kreskowanie i prawdopodobnie jeszcze więcej?