По состоянию на март 2020 года большинство других ответов на этот вопрос устарели на несколько лет. Когда вы сталкиваетесь с советами по вопросам упаковки Python, не забывайте смотреть дату публикации и не доверяйте устаревшей информации.
Руководство пользователя по упаковке Python стоит прочитать. На каждой странице отображается дата «последнего обновления», поэтому вы можете проверить актуальность руководства, и оно достаточно полное. Тот факт, что он размещен на поддомене python.org Python Software Foundation, просто добавляет ему доверия. Страница с резюме проекта особенно актуальна здесь.
Резюме инструментов:
Вот краткое изложение ландшафта упаковки Python:
Поддерживаемые инструменты:
distutilsдо сих пор является стандартным инструментом для упаковки в Python. Он включен в стандартную библиотеку (Python 2 и Python 3). Это полезно для простых дистрибутивов Python, но не имеет функций. Он представляет distutilsпакет Python, который можно импортировать в ваш setup.pyскрипт.
setuptoolsбыл разработан для преодоления ограничений Distutils и не входит в стандартную библиотеку. Он представил утилиту командной строки под названием easy_install. Он также представил setuptoolsпакет Python, который можно импортировать в ваш setup.pyскрипт, и pkg_resourcesпакет Python, который можно импортировать в ваш код, чтобы найти файлы данных, установленные вместе с дистрибутивом. Один из его недостатков в том, что он исправляет distutilsпакет Python. Это должно хорошо работать с pip. Это видит регулярные выпуски.
scikit-buildулучшенный генератор системы сборки, который внутренне использует CMake для сборки скомпилированных расширений Python. Поскольку scikit-build не основан на distutils, он не имеет никаких ограничений. Когда присутствует ninja-build, scikit-build может компилировать большие проекты в три раза быстрее, чем альтернативные. Это должно хорошо работать с pip.
distlibэто библиотека, которая обеспечивает функциональность, которая используется инструментами более высокого уровня, такими как pip.
packagingтакже библиотека, которая обеспечивает функциональность, используемую инструментами более высокого уровня, такими как pipиsetuptools
Устаревшие / заброшенные инструменты:
distributeбыл вилкой setuptools. Он разделяет одно и то же пространство имен, поэтому, если у вас установлен Distribute, import setuptoolsон фактически импортирует пакет, распространяемый вместе с Distribute. Распространение было объединено обратно в Setuptools 0.7 , поэтому вам больше не нужно использовать Распространение. Фактически, версия на Pypi - это просто слой совместимости, который устанавливает Setuptools.
distutils2была попытка взять лучшее из distutils, setuptoolsа distributeи стать стандартным инструмент , включенным в стандартной библиотеке Python. Идея заключалась в том, что distutils2он будет распространяться для старых версий Python и distutils2будет переименован в packagingPython 3.3, который включит его в свою стандартную библиотеку. Эти планы не пошли, как задумано, и в настоящее время distutils2это заброшенный проект . Последний выпуск был в марте 2012 года, и его домашняя страница Pypi была наконец обновлена, чтобы отразить его смерть.
Другие:
Существуют и другие инструменты, если вам интересно, прочитайте Краткое изложение проекта в Руководстве пользователя по упаковке Python. Я не буду перечислять их все, чтобы не повторить эту страницу, и держать ответ соответствующий вопрос, который был только о том distribute, distutils, setuptoolsи distutils2.
Рекомендация:
Если все это является новым для вас, и вы не знаете, с чего начать, я бы порекомендовал учитьсяsetuptools вместе с pipи virtualenv, которые все очень хорошо работают вместе.
Если вы ищете в virtualenv, вы можете быть заинтересованы в этом вопросе: В чем разница между venv, pyvenv, pyenv, virtualenv, virtualenvwrapperи т.д.? , (Да, я знаю, я стону с тобой.)