Відмінності між розподілом, distutils, setuptools та distutils2?


594

Ситуація

Я намагаюся перенести бібліотеку з відкритим кодом на Python 3. ( SymPy , якщо хтось цікавиться.)

Отже, мені потрібно запустити 2to3автоматично під час створення для Python 3. Для цього мені потрібно скористатися distribute. Тому мені потрібно портувати поточну систему, яка (відповідно до doctest) є distutils.


Проблема

На жаль, я не впевнений , що різниця між цією modules- distutils, distribute, setuptools. Документація є найкращою схематичною схемою, оскільки всі вони, здається, є вилами один для одного, призначені для сумісності у більшості обставин (але насправді, не у всіх)… і так далі, і так далі.


Питання

Чи може хтось пояснити відмінності? Що я повинен використовувати? Яке найсучасніше рішення? (Окрім того, я також вдячний би в деякому посібнику щодо перенесення Distribute, але це не виходить за рамки питання ...)


22
Як заплутано? Я прийшов на python з фону Java / C ++. У таких ситуаціях розподіл дуже прямий вперед. З python, я a, повністю заплутався стосовно всіх цих систем розподілу.
Раффі Хатчадуріан

75
Я погоджуюсь, що в упаковці / установці Python є занадто багато альтернатив, без чітких рекомендацій з боку громади.
Сабунку

6
Я просто хотів пов’язати цю пов’язану інформацію на pip, що не підтримує бінарні дистрибутиви lucumr.pocoo.org/2012/6/22/hate-hate-hate-everywhere
pixelbeat

@pixelbeat pip підтримує встановлення коліс (так звані бінарні дистрибутиви), це посилання застаріло.
Flimm

Відповіді:


836

Станом на березень 2020 року більшість інших відповідей на це питання є застарілими на кілька років. Коли ви стикаєтесь із порадами щодо питань упаковки Python, не забудьте переглянути дату публікації та не довіряйте застарілій інформації.

Керівництво користувача Упаковка Python варто прочитати. На кожній сторінці відображається "остання оновлена" дата, тому ви можете перевірити наявність цього посібника, і він досить вичерпний. Той факт, що він розміщений на піддомені python.org Фонду програмного забезпечення Python, просто додає йому довіри. Сторінка "Підсумки проекту " тут особливо актуальна.

Короткий зміст інструментів:

Ось підсумок пейзажу упаковки Python:

Підтримувані інструменти:

Застарілі / покинуті інструменти:

  • 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і т.д.? . (Так, я знаю, я стогну з тобою.)


2
@makeramen: Дивіться цю тему у списку розсилки .
Flimm

6
І не виглядає краще: 'Distribute' is a now deprecated fork of the 'Setuptools' project.@ PyPI Distribute page.
KurzedMetal

3
@KurzedMetal, за словами людей SetupTools, setuptools 0.7 буде включати в себе як розповсюдження, так і старі настройки для відновлення порядку у Всесвіті. Тож фактично налаштовано значно покращитися!
Джон МакДоннелл

8
Python Упаковка Керівництво користувача буде мати саму інформацію уточнений станом пітона упаковки. Це зазначив Нік Кафлан на PyCon 2013 року .
imanuelcostigan

1
@Flimm Остання редакція була досить давно. Чи вже дозріла Бенто?
Мартін Тома

251

Я обслуговуючий дистрибутив та розробник пакунків distutils2 / Packaging. Я говорив про упаковку Python на ConFoo 2011, і сьогодні я пишу розширену версію. Він ще не опублікований, тому ось уривки, які повинні допомогти визначити речі.

  • Distutils - це стандартний інструмент, який використовується для упаковки. Він працює досить добре для простих потреб, але обмежений і не тривіальний.

  • Setuptools - це проект, який народився з бажання заповнити відсутні функціонал distutils та вивчити нові напрямки. У деяких підспільнотах це фактично стандарт. Він використовує виправлення мавп та магію, яку нахмурюють розробники ядра Python.

  • Distribute - це вилка Setuptools, яку розпочали розробники, відчуваючи, що темп її розвитку був занадто повільним і еволюціонувати не вдалося. Її розвиток значно сповільнився, коли distutils2 розпочала одна і та ж група. Оновлення 2013 - серпень: розподіл об’єднано назад у setuptools та припинено.

  • Distutils2 - це нова бібліотека distutils, створена як вилка кодової бази distutils, з гарними ідеями, взятими з інструментів налаштування (про які деякі були ретельно обговорені в PEPs) та базовим інсталятором, натхненним pip. Фактичне ім’я, яке ви використовуєте для імпорту Distutils2, знаходиться packagingу стандартній бібліотеці Python 3.3+ або distutils2в версіях 2.4+ та 3.1–3.2. (Репортер буде доступний незабаром.) Distutils2 не зробив випуск Python 3.3, і його було призупинено.

Більше інформації:

Я сподіваюся, що незабаром я закінчую свій путівник, він буде містити більше інформації про сильні та слабкі місця кожної бібліотеки та керівництво про перехід.


1
Ні. Distutils2 бере деякі гарні ідеї з setuptools / distribute, після стандартизації (PEPs) чи ні (наприклад, я наставник студента GSoC, який додає команду для розробки та створення автоматичних сценаріїв), але це ніколи не буде спадом заміна: є деякі частини, які ми не хочемо (яйця, інтеграція в VCS тощо). ОТОH, у distutils2 є деякі речі, яких у налаштуваннях / розповсюдженні немає. Для полегшення переходу, я думаю, що розробники дистрибутиву, можливо, будуть використовувати distutils2 для підтримки нових стандартів та інструментів; Я також думаю, що я пам’ятаю розробник програми setuptools, що він хоче підтримувати нові стандарти.
Éric Araujo

1
Куди потрапляє ez_setup у всьому цьому? Чи є оновлення статусу distutils2?
Джеймс Макмахон

2
@ ÉricAraujo Вибачте про затримку. Я дуже сподіваюся, що він готовий вчасно за 3,4! Я люблю Python, але упаковка завжди змусила мене головою об стіну. (Іншими новинами, як виходить ваш посібник? Якщо він закінчений, чи можете ви пов’язати його у своїй відповіді вище?)
Зерін

9
@AlexisHuet Цей коментар буде кращим, якби він містив посилання на коментар нижче (який можна отримати за допомогою shareкнопки).
erikbwork

2
Ви , можливо , слід оновити відповідь на згадку , що distributeбув недавно злилася назад в setuptools. Той факт, що значна частина застарілої інформації додає плутанину
Amro

5

ПРИМІТКА. Відповідь застаріло, розповсюдьте застаріле. Ця відповідь більше не є дійсною, оскільки було створено службу упаковки Python, яка зробила чималу роботу з очищення цього питання.


Так, ти це зрозумів. : -Я думаю, що в даний час кращим пакетом є Distribute , що є роздрібним настроєм, який є розширенням distutils (оригінальна система упаковки). Інсталятор не підтримувався, тому він був роздвоєним та перейменованим, проте при встановленні він використовує назву пакета setuptools! Я думаю, що більшість розробників Python зараз використовують дистрибутив, і я можу точно сказати, що це роблю.


Для запису я прийняв цю відповідь, тому що вона розповіла мені ситуацію зараз (а fork fork - це розширення відношення, яке малюнок в іншій відповіді просто не згадує). І десь по дорозі я також дізнався, що сама документація зазвичай не впевнена, що вона намагається сказати.
VPeric

2
@VPeric, Дійсно, документація відображає той факт, що цей аспект пітона знаходиться в стані потоку / безладу.
juanchopanza

2

Я розумію, що я відповів на ваше другорядне запитання, не звертаючись до безперечних припущень у вашій початковій проблемі:

Я намагаюся перенести бібліотеку з відкритим кодом (SymPy, якщо хтось цікавиться) на Python 3. Для цього мені потрібно запустити 2to3 автоматично під час створення для Python 3.

Ви можете , чи не потрібно . Інші стратегії описані на сторінці http://docs.python.org/dev/howto/pyporting

Для цього мені потрібно використовувати розподіл,

Ви можете :) distutils підтримує перетворення 2to3 для збирання коду (не docstrings) іншим способом, який поширює: http://docs.python.org/dev/howto/pyporting#during-installation


Дякуємо, хоча ми вже вирішили вирішити проблему, написавши наш сценарій для обробки конверсії. Так, я знав, що існують інші варіанти, ніж використання 2to3, але SymPy - це складна база даних коду (близько 200k + рядків минулого разу, коли я перевірив), і використання 2to3 було єдиною реалістичною стратегією. Ще раз дякую, у будь-якому випадку!
VPeric

2

Оновлення цього питання наприкінці 2014 року, де, на щастя, хаос упаковки Python був значно очищений менеджером пакетів « conda » компанії Continuum .

Зокрема, conda швидко дає змогу створювати conda " середовища ". Ви можете налаштувати своє середовище за допомогою різних версій Python. Наприклад:

conda create -n py34 python=3.4 anaconda

conda create -n py26 python=2.6 anaconda

створить два ("py34" або "py26") середовища Python з різними версіями Python.

Після цього ви можете викликати оточення певною версією Python за допомогою:

source activate <env name>

Ця функція здається особливо корисною у вашому випадку, коли вам доведеться мати справу з різною версією Python.

Крім того, конда має такі особливості:

  • Python agnostic
  • Поперечна платформа
  • Не потрібні права адміністратора
  • Інтелектуальне управління залежностями (шляхом вирішення SAT)
  • Добре стосується бібліотек C, Fortran та системного рівня, з якими вам, можливо, доведеться зв’язатись

Цей останній момент особливо важливий, якщо ви знаходитесь на арені наукових обчислень.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.