Андрей Власовских

Блог Андрея Власовских

Пакеты Python: distutils или setuptools

6 комментариев

Недавно в обсуждении одного бага funcparserlib всплыла тема установки пакетов Python. Раньше я пользовался модулем setuptools и частично связанной с ним утилитой easy_install. Однако из-за проблем с ним я решил попробовать использовать модуль distutils, идущий в поставке Python и являющийся официальным способом установки пакетов Python.

Есть разные претензии к setuptools (см. посты в блогах Brett Cannon и James Bennett), Здесь я кратко скажу о моих собственных. Во-первых, setuptools не создаёт промежуточные каталоги при setup.py install. Во-вторых, интерпретатор Python при старте сканирует слишком много файлов и каталогов. Возможно, это связано с форматом пакетов eggs модуля setuptools, хотя может и нет. Наконец, setuptools привносит дополнительную сложность по сравнению с distutils, а пользы от него — только в более простой установке скриптов, команде setup.py develop и описании зависимостей.

Все эти вещи можно сделать и без setuptools. Скрипты можно ставить обычным копированием с помощью distutils. Команду develop можно заменить созданием символьной ссылки из каталога в PYTHONPATH на каталог разработки.  В плане зависимостей интересна утилита pip, но пока что easy_install кажется удобнее.

Реклама

Written by vlan

2009-10-06 в 16:33

Опубликовано в Uncategorized

Tagged with , , , ,

комментариев 6

Subscribe to comments with RSS.

  1. Спасибо. Сейчас всё работает как надо. Было заодно очень интересно узнать чем же всё таки нехорош setuptools.

    Сергей

    2009-10-06 at 16:54

  2. @Jetxee В принципе, в постах, на которые я дал ссылки, описаны основные проблемы setuptools:

    • Не поддерживается с 2008 года
    • Делает проекты, использующие его, всё более зависимыми от себя за счёт перемешивания обычного кода программы с кодом развёртывания
    • Привносит дополнительную сложность там, где можно действовать проще

    Offtopic: Что-то WordPress использует странные стили CSS в комментах.

    vlasovskikh

    2009-10-06 at 17:07

    • В очередной раз вижу, как люди отказываются от удобного инструмента из-за надуманных недостатков :-)

      Зависимость проектов от setuptools не более чем от любой другой используемой библиотеки. Это повод не использовать ничего кроме стандартной поставки питона?

      Кроме того setuptools приносит дополнительную легкость там, где без него было бы сложно: entry_points, pgk_resources, easy_install, зависимости. И конечно же «Команду develop можно заменить созданием символьной ссылки из каталога в PYTHONPATH на каталог разработки», но разве это не дополнительная сложность.

      Да у setuptools есть недостатки, но разве их нет в альтернативных проектах?

      Захар

      2009-11-24 at 12:05

  3. Мне pip нравится тем, что умеет ставить из репозитория, причём в «любом» формате (setuptools умееет только svn, насколько я знаю — будь то то svn, hg или git. Довольно удобно в век развития соцсервисов типа bitbucket и github.

    Grigoriy Petukhov

    2009-11-19 at 06:08

  4. @lorien distutils не использует файлы репозиториев. Лишь бы файлы setup.py и MANIFEST.in были правильными.

    Я пока что не разобрался, как заставить pip автоматически и рекурсивно вытягивать и ставить зависимости. Это возможно?

    vlasovskikh

    2009-11-21 at 01:28

  5. Один принципиальный нюанс: setuptools позволяет делать кросскомпиляцию а distutils — нет. В связи с тем что у меня на компе настоящий террариум то мой выбор очевиден.

    Vitaly Chernookiy

    2010-03-13 at 20:14


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: