По состоянию на март 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
будет переименован в packaging
Python 3.3, который включит его в свою стандартную библиотеку. Эти планы не пошли, как задумано, и в настоящее время distutils2
это заброшенный проект . Последний выпуск был в марте 2012 года, и его домашняя страница Pypi была наконец обновлена, чтобы отразить его смерть.
Другие:
Существуют и другие инструменты, если вам интересно, прочитайте Краткое изложение проекта в Руководстве пользователя по упаковке Python. Я не буду перечислять их все, чтобы не повторить эту страницу, и держать ответ соответствующий вопрос, который был только о том distribute
, distutils
, setuptools
и distutils2
.
Рекомендация:
Если все это является новым для вас, и вы не знаете, с чего начать, я бы порекомендовал учитьсяsetuptools
вместе с pip
и virtualenv
, которые все очень хорошо работают вместе.
Если вы ищете в virtualenv
, вы можете быть заинтересованы в этом вопросе: В чем разница между venv
, pyvenv
, pyenv
, virtualenv
, virtualenvwrapper
и т.д.? , (Да, я знаю, я стону с тобой.)