Вопросы о Setuptools и альтернативах
-
21-08-2019 - |
Вопрос
В последнее время я видел немало нападок на инструменты настройки в Интернете.Совсем недавно я прочитал книгу Джеймса Беннета. На упаковке пост о том, почему никому не следует использовать 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 — это действительно замечательная вещь.Большинство людей, которые ее ненавидят, не понимают ее или просто не имеют возможности использовать ее в качестве полнофункциональной системы распространения.
:-)