Это несколько спорная тема, и ответ на данный момент заключается в том, что нет единого инструмента, с которым все согласны, является «правильный путь» для создания исходных дистрибутивов, и каким бы он ни был. Вы можете увидеть длинную ветку об этом в дискурсе Python Packaging .
Я не решаюсь давать слишком много советов по упаковке в прочных форматах, потому что пески постоянно меняются, но по состоянию на ноябрь 2019 года,setup.py sdist
является не устаревшим, но имеет имеет все недостатки, которые PEP 517 и PEP 518 должны были исправить, а именно то, что вы должны создать среду сборки самостоятельно (и знать,о всех зависимостях сборки), и он только работает с setuptools / distutils и их эквивалентами.
Это не «официальная» рекомендация, а лучшая на данный момент замена для setup.py sdist
иsetup.py bdist_wheel
вызывает версию командной строки pep517
. Замена для sdist
:
python -m pep517.build --source .
. Вы можете одновременно создать колесо и распределение источника следующим образом:
python -m pep517.build --source --binary .
Вот как я строю свой PEP 517-совместимые пакеты.
Для этого требуется, чтобы в вашем проекте были pyproject.toml
, а для pyproject.toml
должны быть ключи build-system.requires
и build-system.build-backend
, но он будет работать для любого проекта с PEP 517-совместимымбэкэнд (включая flit
).
Другие инструменты :
Почему бы не использовать flit
или poetry
или hatch
? Все эти инструменты доступны для тех, кто хочет их использовать, но они не являются ответом на этот вопрос . Этот вопрос задает вопросы о проектах, построенных с setuptools
, которые используют декларативный формат setup.cfg
. Ни flit
, ни poetry
не действуют как универсальные интерфейсы сборки PEP 517, и поэтому они только не работают в качестве команд сборки для проектов, использующих их соответствующие серверные части.
Я недостаточно знакомс hatch
, чтобы сказать, может ли он управлять проектами с бэкэндами , отличными от setuptools, но (опять же, по состоянию на ноябрь 2019 года), это не фронтэнд PEP 517, ион не будет работать, если у вас нет setup.py
(это вызовет ошибку «не могу открыть файл setup.py», и он проигнорирует ваш pyproject.toml
файл).