Подтвердить что ты не робот

Вопросы о Setuptools и альтернативах

В последнее время я видел хороший набор настроек, которые в последнее время бьют по интернетам. Совсем недавно я прочитал сообщение Джеймса Беннетта "Об упаковке" о том, почему никто не должен использовать setuptools. Из моего времени в #python на Freenode, я знаю, что есть несколько душ, которые абсолютно ненавидят его. Я считаю себя среди них, но я действительно использую его.

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

Мое понимание таких инструментов, как pip, заключается в том, что это означает замену easy_install (а не setuptools). На самом деле, pip использует некоторые компоненты setuptools, правильно?

В большинстве моих пакетов используется setup.ool, поддерживающий setuptools, который объявляет все зависимости. Когда они будут готовы, я построю sdist, bdist и bdist_egg и загружу их в pypi.

Если бы я хотел переключиться на использование pip, какие изменения мне нужно сделать, чтобы избавиться от зависимостей easy_install? Где объявляются зависимости? Я предполагаю, что мне нужно будет уйти от использования формата яйца и предоставить только исходные дистрибутивы. Если да, то как я могу создать каталоги с информацией о яйцах? или мне даже нужно?

Как это изменит мое использование virtualenv? Не использует ли virtualenv easy_install для управления средами?

Как это изменит мое использование setuptools, предоставленное командой "develop"? Должен ли я не использовать это? Какая альтернатива?

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

Прежде чем кто-либо подскажет это, я не ищу решение, зависящее от ОС. В основном я занимаюсь debian linux, но deb-пакеты не являются опцией, поскольку по причинам Ian Bicking выделяет здесь.

4b9b3361

Ответ 1

pip использует Setuptools и не требует никаких изменений в пакетах. Он фактически устанавливает пакеты с помощью Setuptools, используя:

python -c 'import setuptools; __file__="setup.py"; execfile(__file__)' \
    install \
    --single-version-externally-managed

Поскольку он использует этот параметр (--single-version-externally-managed), он никогда не устанавливает яйца в виде zip файлов, не поддерживает несколько одновременно установленных версий программного обеспечения, и пакеты устанавливаются плоскими (например, python setup.py install работает, если вы используете только distutils). Метаданные яйца все еще установлены. pip также, как easy_install, загружает и устанавливает все требования пакета.

Кроме того, вы также можете использовать файл требований для добавления других пакетов, которые должны быть установлены в пакетном режиме, и более точно выполнять требования к версии (не помещая эти точные требования в ваши файлы setup.py). Но если вы не делаете файлы требований, вы будете использовать его так же, как easy_install.

Для вашего install_requires я не рекомендую никаких изменений, если вы не пытались создать там очень точные требования, которые, как известно, хороши. Я думаю, что существует ограничение на то, насколько точно вы можете быть полезны в файлах setup.py о версиях, потому что вы не можете точно знать, какая будет будущая совместимость новых библиотек, и я не рекомендую вам пытаться предсказать это. Файлы требований являются альтернативным местом для выработки консервативных требований к версии.

Вы все еще можете использовать python setup.py develop, и на самом деле, если вы сделаете pip install -e svn+http://mysite/svn/Project/trunk#egg=Project, он проверит это (в src/project) и запустит setup.py develop на нем. Так что рабочий процесс ничем не отличается.

Если вы запустите pip verbosely (например, pip install -vv), вы увидите много команд, которые будут запущены, и вы, вероятно, узнаете большинство из них.

Ответ 2

Я пишу это в апреле 2014 года. Помните о дате написания о упаковке, дистрибутиве или установке Python. Похоже, что в последнее время, скажем, через три года произошло некоторое ослабление, совершенствование реализаций, стандартизация PEP и объединение фронтов.

Например, Python Packaging Authority - это "рабочая группа, которая поддерживает многие из соответствующих проектов в упаковке Python".

python.org Руководство пользователя Python Packaging имеет Рекомендации по инструменту и Будущее Python Packaging".

distribute была ветвью setuptools, которая была устранена в июне 2013 года. В руководстве говорится: "Используйте setuptools для определения проектов и создания распределений источников".

Как и в случае PEP 453 и Python 3.4, руководство рекомендует "Использовать pip для установки пакетов Python из PyPI", а pip входит в состав Python 3.4 и устанавливается в virtualenvs на pyvenv, который также включен, Вы можете найти PEP 453 "обоснование" .

Есть также новые и новые инструменты, упомянутые в руководстве, в том числе wheel и buildout.

Я рад, что прочитал две следующие технические/полуполитические истории.

Martijn Faassen в 2009 году: История упаковки Python.

И Армин Роначер в июне 2013 года (название несерьезно): Python Packaging: ненависть, ненависть, ненависть везде.

Ответ 3

Для начала, пип действительно новый. Новые, неполные и в значительной степени не проверенные в реальном мире.

Это показывает большие перспективы, но до тех пор, пока он не сможет сделать все, что может сделать easy_install/setuptools, он вряд ли поймает большой путь, конечно, не в корпорации.

Easy_install/setuptools большой и сложный - и это оскорбляет многих людей. К сожалению, есть действительно веская причина для этой сложности, которая заключается в том, что она обслуживает огромное количество различных вариантов использования. Моя собственная поддержка большого ( > 300) пула пользователей настольных компьютеров, а также сетку с аналогичным размером с часто обновляемым приложением. Понятие о том, что мы могли бы сделать это, позволяя каждому пользователю устанавливать из источника, смехотворно - яйца зарекомендовали себя как надежный способ распространения моего проекта.

Мой совет: научитесь использовать setuptools - это действительно замечательная вещь. Большинство людей, которые его ненавидят, не понимают этого или просто не используют прецедент для полнофункциональной системы распространения.

: -)