Станом на березень 2020 року більшість інших відповідей на це питання є застарілими на кілька років. Коли ви стикаєтесь із порадами щодо питань упаковки Python, не забудьте переглянути дату публікації та не довіряйте застарілій інформації.
Керівництво користувача Упаковка Python варто прочитати. На кожній сторінці відображається "остання оновлена" дата, тому ви можете перевірити наявність цього посібника, і він досить вичерпний. Той факт, що він розміщений на піддомені python.org Фонду програмного забезпечення Python, просто додає йому довіри. Сторінка "Підсумки проекту " тут особливо актуальна.
Короткий зміст інструментів:
Ось підсумок пейзажу упаковки 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, він насправді не має жодних своїх обмежень. За наявності ніндзя, збірка scikit може збирати великі проекти втричі швидше, ніж альтернативи. З цим слід добре працювати pip
.
distlib
це бібліотека, яка забезпечує функціональність, яку використовують такі інструменти вищого рівня pip
.
packaging
це також бібліотека, яка забезпечує функціональність, що використовується інструментами вищого рівня, такими як pip
іsetuptools
Застарілі / покинуті інструменти:
distribute
був виделкою setuptools
. Він поділяв одне і те саме простір імен, тому, якщо у вас було встановлено Distribute, import setuptools
фактично було б імпортувати пакет, розподілений разом з Distribute. Distribute було об'єднано назад у Setuptools 0.7 , тому більше не потрібно використовувати Distribute. Насправді версія на 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
і т.д.? . (Так, я знаю, я стогну з тобою.)