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

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

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

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

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

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

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

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

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

Прежде чем кто-либо предложит это, я не ищу решение, зависящее от ОС. В основном меня интересует Debian Linux, но пакеты deb не подходят по причинам, изложенным здесь Ианом Бикингом .

15.12.2008 15:06:49
Некоторые из истории setuptools, distutils, distutils2, pip, и друзья обсуждаются здесь .
intuited 28.09.2010 00:43:44
3 ОТВЕТА
РЕШЕНИЕ

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 многословно (например pip install -vv), вы увидите много запущенных команд и, вероятно, узнаете большинство из них.

25
19.03.2012 15:33:36
Мне бы хотелось узнать более подробно об этом: «Кроме того, вы также можете использовать файл требований для добавления других пакетов, которые должны быть установлены в пакете, и для уточнения требований к версии».
Drake Guan 18.04.2012 01:45:22

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

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

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

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

:-)

2
15.12.2008 18:24:26
Честно говоря, я чувствую, что довольно хорошо знаю setuptools. Были некоторые проблемы с этим .. главным образом с тем, как он обрабатывает развертывание яичных файлов. Это работает достаточно хорошо для меня прямо сейчас, но есть много людей в сообществе питонов (чье мнение я уважаю), которые просто не будут касаться этого.
Jeremy Cantrell 15.12.2008 19:13:05
Хотя pip новый, если он работает для вас, он работает для вас - он не очень тонкий . В основном, как easy_install, он находит пакеты, загружает их и устанавливает их (вызывая установку python setup.py или python setup.py development, если вы используете -e).
ianb 15.12.2008 23:17:24
setuptools, не поддерживается и не поддерживает python 3. Возможно, его заменяетdistribute
sorin 19.07.2010 13:40:12

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

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

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

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

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

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

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

Мартейн Фаассен в 2009 году: история упаковки Python .

И Армин Ронахер в июне 2013 года (название не является серьезным): Python Упаковка: ненавидеть, ненавидеть, ненавидеть везде .

3
19.04.2014 04:04:55