Вопросы о Setuptools и альтернативах - PullRequest
21 голосов
/ 15 декабря 2008

В последнее время я видел довольно много бита setuptools в интернете. Совсем недавно я прочитал пост Джеймса Беннетта On package о том, почему никто не должен использовать 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, предоставляемой командой "velop "? Я не должен использовать это? Какая альтернатива?

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

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

Ответы [ 3 ]

25 голосов
/ 16 декабря 2008

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

3 голосов
/ 18 апреля 2014

Я пишу это в апреле 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 с помощью pyvenv, который также включен , Вам может показаться интересным раздел PEP 453 .

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

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

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

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

2 голосов
/ 15 декабря 2008

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

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

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

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

: -)

...