Вопрос

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

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

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

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

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

Например, Управление по упаковке Python — это «рабочая группа, которая поддерживает многие соответствующие проекты в пакетах 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:Ненависть, ненависть, ненависть повсюду.

Начнем с того, что pip действительно новый.Новый, неполный и практически непроверенный в реальном мире.

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

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

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

:-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top