Различия между распределением, distutils, setuptools и distutils2?

Ситуация

Я пытаюсь портировать библиотеку с открытым исходным кодом на Python 3. ( SymPy , если кому интересно).

Итак, мне нужно запустить 2to3 автоматически при создании для Python 3. Для этого мне нужно использовать distribute . Поэтому мне нужно перенести текущую систему, которая (согласно доктрине) является distutils .

Проблема

К сожалению, я не уверен, в чем разница между этими модулями – distutils , distribute , setuptools . Документация является отрывочной, так как все они кажутся вилкой друг друга, которые должны быть совместимы в большинстве случаев (но на самом деле, не все) … и так далее и т. Д.

Вопрос

Может ли кто-нибудь объяснить различия? Что я должен использовать? Какое самое современное решение? (В стороне, я также был бы признателен за некоторое руководство по портированию в Distribute , но это немного выходит за рамки вопроса …)

7 Solutions collect form web for “Различия между распределением, distutils, setuptools и distutils2?”

По состоянию на январь 2017 года все остальные ответы на этот вопрос не менее двух лет устарели. Когда вы сталкиваетесь с советами по вопросам упаковки Python, не забудьте посмотреть дату публикации и не доверять устаревшей информации.

Руководство пользователя Python Packaging заслуживает внимания. На каждой странице отображается «последняя проверенная» дата, поэтому вы можете проверить текущую версию руководства, и это довольно полно. Тот факт, что он размещен на субдомене python.org Python Software Foundation, просто добавляет к нему доверие. Здесь особенно важна страница « Резюме проектов» .

Резюме инструментов:

Вот краткий обзор ландшафта упаковки Python в январе 2017 года:

Поддерживаемые инструменты:

  • Distutils по-прежнему является стандартным инструментом для упаковки в Python. Он включен в стандартную библиотеку (Python 2 и Python 3.0 до 3.6). Он полезен для простых дистрибутивов Python, но не имеет функций. Он представляет пакет distutils Python, который может быть импортирован в ваш скрипт setup.py .

    • Официальные документы | раздел distutils руководства пользователя пакета Python
  • Setuptools был разработан для преодоления ограничений Distutils и не включен в стандартную библиотеку. В нем появилась утилита командной строки easy_install . Он также представил setuptools Python, который можно импортировать в ваш сценарий setup.py , и пакет pkg_resources Python, который можно импортировать в ваш код, чтобы найти файлы данных, установленные с дистрибутивом. Одна из его проблем заключается в том, что она обезьяна – исправляет пакет Python distutils . Он должен хорошо работать с pip . Он видит регулярные релизы.

    • Официальные документы | Pypi страница | GitHub repo | setuptools раздела Python Package User Guide

Устаревшие / брошенные инструменты:

  • Распространение было вилкой Setuptools. Он разделял одно и то же пространство имен, поэтому, если у вас установлен Distribute, import setuptools фактически импортирует пакет, распространяемый с помощью Distribute. Распространение было объединено обратно в Setuptools 0.7 , поэтому вам больше не нужно использовать Distribute. Фактически, версия на Pypi – это только уровень совместимости, который устанавливает Setuptools.

  • Distutils2 был попыткой взять лучшее из Distutils, Setuptools и Distribute и стать стандартным инструментом, включенным в стандартную библиотеку Python. Идея заключалась в том, что Distutils2 будет распространяться на старые версии Python и что Distutils2 будет переименован в packaging для Python 3.3, которая будет включать его в свою стандартную библиотеку. Однако эти планы не пошли так, как предполагалось, и в настоящее время Distutils2 является заброшенным проектом . Последний выпуск был в марте 2012 года, и его домашняя страница Pypi, наконец, была обновлена, чтобы отразить ее смерть.

Программное обеспечение Alpha:

  • Distlib – это инструмент, который нацелен на реализацию подмножества функциональных возможностей предыдущих инструментов, но только функциональность, которая очень четко определена в принятых PEP. Это один из инструментов PyPA (Python Package Authority), и он, надеюсь, будет включен, в конечном счете, в стандартную библиотеку Python когда-нибудь. Он по-прежнему считается альфа-программным обеспечением, поэтому конечные пользователи опасаются.

    • Официальные документы | Pypi страница | Репозиторий Bitbucket | раздел distlib руководства пользователя пакета Python
  • Есть еще несколько инструментов (например, Bento), но я не буду упоминать их, поскольку они слишком неясны или ниши, или ранние или неразработанные для этого ответа, или же они не являются прямыми альтернативами.

Рекомендация:

Поэтому в заключение, из всех этих вариантов, я бы рекомендовал Setuptools , если ваши требования не являются очень базовыми, и вам нужны только Distutils. Setuptools отлично работает с Virtualenv и Pip, которые я настоятельно рекомендую. Virtualenv и Pip могут считаться официальными, так как они входят в состав PyPA, а Python 3 теперь обеспечивает ensurepip (что помогает вам устанавливать pip на некоторых системах).

Если вы смотрите на Virtualenv, вам может быть интересен этот вопрос: в чем разница между venv , pyvenv , pyenv , virtualenv , virtualenvwrapper и т. Д.? , (Да, я знаю, я стонаю с тобой.)

В качестве примечания я рекомендую использовать Virtualenv 1.10 или новее, так как это первая версия, которая распознает слияние с Setuptools / Distribute для обоих Python 2 и 3.

Я сторонник distutils и distutils2 / упаковщик. Я поговорил о упаковке Python в ConFoo 2011, и в эти дни я пишу расширенную версию. Он еще не опубликован, так что вот выдержки, которые должны помочь определить вещи.

  • Distutils – это стандартный инструмент, используемый для упаковки. Он работает достаточно хорошо для простых нужд, но ограничен и не является тривиальным.

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

  • Распространение – это вилка Setuptools, которая была запущена разработчиками, чувствуя, что ее темпы развития были слишком медленными и что его невозможно было развить. Его развитие значительно замедлилось, когда distutils2 был запущен одной и той же группой. Обновление 2013-август: дистрибутив сливается обратно в setuptools и прекращается.

  • Distutils2 – это новая библиотека distutils, начатая как вилка базы данных distutils, с хорошими идеями, взятыми из инструментов настройки (некоторые из которых были подробно обсуждены в PEP), и базовым установщиком, вдохновленным pip. Фактическое имя, которое вы используете для импорта Distutils2, является packaging в стандартной библиотеке Python 3.3+ или distutils2 в версиях 2.4+ и 3.1-3.2. (Вскоре будет доступен backport.) Distutils2 не выпустил релиз Python 3.3, и он был приостановлен.

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

  • Судьба Distutils – Pycon Summit + Packaging Sprint подробный отчет
  • Быстрая разница между Distutils и Distutils2

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

ПРИМЕЧАНИЕ. Ответ устарел. Распространение теперь устарело.

Да, ты понял. : -Я думаю, что в это время предпочтительным пакетом является Distribute , который является вилкой setuptools, которая является расширением distutils (исходная система упаковки). Setuptools не поддерживался, поэтому он был разветвлен и переименован, однако при установке он использует имя пакета setuptools! Я думаю, что большинство разработчиков Python теперь используют Distribute, и я могу с уверенностью сказать, что это так.

Обновление этого вопроса в конце 2014 года, где, к счастью, хаос Python упакован в большой степени благодаря менеджеру пакетов Conlude от Continuum.

В частности, 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.

Кроме того, conda имеет следующие функции:

  • Агностик Python
  • Кросс-платформа
  • Не требуется никаких привилегий администратора
  • Интеллектуальное управление зависимостями (посредством решения SAT)
  • Хорошо работает с библиотеками C, Fortran и системного уровня, которые, возможно, вам придется связать с

Этот последний момент особенно важен, если вы находитесь на научной вычислительной арене.

Многие люди жаловались здесь на отсутствие четкого руководства сообщества по этому вопросу.

В настоящее время это выглядит как лучший авторитетный источник рекомендаций по инструментам: https://packaging.python.org/en/latest/current.html#tool-recommendations

Я понимаю, что я ответил на ваш вторичный вопрос, не обращаясь к неоспоримым предположениям в вашей первоначальной проблеме:

Я пытаюсь портировать библиотеку с открытым исходным кодом (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

Этот предмет, похоже, все еще находится в движении. По состоянию на 10-31-2013 в «Кратких рекомендациях« Руководство пользователя Python Packaging »указано« какой набор инструментов в настоящее время рекомендуется ». Он также ссылается на « Будущее упаковки Python »,

  • Ubuntu + virtualenv = беспорядок? virtualenv ненавидит dist-пакеты, хочет сайты-пакеты
  • Принудительное затмение для перезагрузки модулей Python
  • "Pip install --editable ./" vs "python setup.py разработать"
  • Непосредственно вызовите функцию setuptools distutils или setuptools () с именем / параметрами команды, без разбора командной строки?
  • Как easy_install плагин для яиц и загрузить его без перезапуска приложения?
  • Как создать яйца Python из исходных пакетов distutils?
  • "Объект AttributeError: 'module' не имеет атрибута" с установленным пакетом
  • ссылки на установку ссылок
  • Как передать флаги расширению distutils?
  • Почему я не могу установить Python 2.7 под Centos 5.5?
  • Как удалить пакеты, установленные с помощью easy_install Python?
  •  
    Interesting Posts for Van-Lav

    Ошибка Django / PIL – вызывается исключение при рендеринге: модуль _imagingft C не установлен

    Получить элементы массива от индекса до конца

    Почему результаты отображения карты () и списка различны?

    Регулярное выражение для подтверждения того, является ли строка допустимым идентификатором в Python

    Как преобразовать строку в байтовые массивы?

    API-интерфейс Google URL Shortener всегда возвращает ту же страницу с pagetoken

    Как использовать espeak с python

    Указатели и массивы в типах Python

    Сравнение двух списков для поиска большего списка

    Стандартный способ встраивания версии в пакет python?

    Кодирование Python, относящееся к функции any и ключевому слову "более одного раза"

    Преобразователь даты с использованием python

    Pandas csv-import: сохранить ведущие нули в столбце

    Как добавить асимметричные ошибочные бары в панельный планшет Pandas?

    os.path.dirname (__ file__) возвращает пустое

    Python - лучший язык программирования в мире.