Станом на березень 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вона буде перейменована в packagingPython 3.3, яка включатиме її до своєї стандартної бібліотеки. Однак ці плани не йшли за задумом, і зараз distutils2це покинутий проект . Останній реліз був у березні 2012 року, і його домашня сторінка Pypi нарешті оновлена, щоб відобразити його смерть.
Інші:
Є й інші інструменти, якщо вам це цікаво, прочитайте резюме проекту в Посібнику користувача упаковки Python. Я не буду перераховувати їх всі, щоб не повторити цю сторінку, і тримати відповідь відповідне питання, який був тільки про те distribute, distutils, setuptoolsі distutils2.
Рекомендація:
Якщо все це для вас нове, і ви не знаєте, з чого почати, я б рекомендував вчитисяsetuptools разом з, pipі virtualenvякі всі разом працюють дуже добре.
Якщо ви шукаєте в virtualenv, ви можете бути зацікавлені в цьому питанні: У чому різниця між venv, pyvenv, pyenv, virtualenv, virtualenvwrapperі т.д.? . (Так, я знаю, я стогну з тобою.)