Состояние Упаковки Python: Buildout, Распределите, Distutils, EasyInstall, и т.д.

В прошлый раз я должен был волноваться об установке пакетов Python, был два года назад работающий с Enthought, NumPy и MayaVi2. Тот опыт дал мне задерживающийся кошмары, связанные с изворотливым поведением устанавливающие и обновляющие пакеты Python в нестандартных местоположениях (в $HOME/usr/local2.6/, например).

Так или иначе моя работа забирает меня к установке различных пакетов Python. Учебное руководство CheeseShop упоминает DistUtils и EasyInstall в дополнение к Buildout! Мне нелегко находить одно место, которое сравнивает их (и другой) программы установки PyPi, таким образом, я надеюсь насладиться сообществом StackOverflow: Каковы преимущества и слабые места каждой программы установки?

24
задан Pete 30 December 2009 в 01:03
поделиться

4 ответа

Distribute - это новая развилка из setuptools (easy_install), которую также следует учитывать. Даже Guido рекомендует его.

Buildout ортогональна для упаковки --- вы можете использовать buildout с дистрибутивом.

.
9
ответ дан 29 November 2019 в 00:01
поделиться

Прежде всего, независимо от выбранного вами инструмента установки, начните использовать virtualenv --no-site-пакеты! Таким образом, пакеты python не устанавливаются глобально, и вы можете легко вернуться как к старым, так и к новым проектам.

Теперь ваше сравнение - это немного "яблочко в яблочко", так как инструменты, которые вы перечислили, не являются взаимоисключающими. Тем не менее, я могу полностью порекомендовать Buildout. Она установит пакеты python, а также другие вещи и позволит вам автоматизировать установку и развертывание (сложных) проектов.

Также, я рекомендую посмотреть Fabric как средство автоматизации административных задач.

.
10
ответ дан 29 November 2019 в 00:01
поделиться

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

Например, если вам нужно установить пакеты python на компьютеры, основанные на Gentoo (GNU/Liunx), вы можете легко использовать g-pypi для создания ебилдов для всех пакетов, использующих дистилляторы (скорее: setup.py). Таким образом, они полностью интегрируются в вашу систему и могут быть добавлены, обновлены и удалены, как и все остальные ваши инструменты. Но это естественно работает только для систем, основанных на Gentoo. Также вы можете использовать yolk, чтобы узнать обо всех пакетах, установленных с помощью easy_install на вашей системе (а не только на Gentoo).

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

0
ответ дан 29 November 2019 в 00:01
поделиться

Я провел небольшое небольшое исследование на эту тему (стоимостью в пару недель), прежде чем остановиться на использовании buildout для всех моих проектов.

DistUtils и EasyInstall в дополнение к Buildout!

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

Например, файл easy_install используется для установки пакетов distutils из pypi(cheeseshop) в каталог сайтов-пакетов Python вашей системы. Это значительно упрощает установку пакетов по системному/глобальному sys.пути.

easy_install очень удобен для пакетов, которые совместимы для всех проектов. Но я нахожу, что предпочитаю использовать system's easy_install для установки пакетов, от которых проекты не зависят. Например, github-cli я использую с каждым проектом, потому что это позволяет мне взаимодействовать с проблемами Github из командной строки проекта. Я использую это с проектами, но это для удобства и сам проект не зависит от этого пакета.

Для управления зависимостями проекта я использую buildout . Buildout позволяет точно указать, от какой версии пакета зависит ваш проект. Я предпочитаю сборку, а не pip-requirements.txt, потому что сборка является декларативной. С помощью pip вы устанавливаете пакеты, а в конце разработки генерируете файл requirements.txt. С другой стороны, с помощью Buildout вы изменяете buildout.cfg перед добавлением яйца с пакетами в ваш проект. Это заставляет меня осознать, какие пакеты я добавляю в проект.

Теперь речь идёт о virtualenv. Очевидно, что одной из наиболее популярных возможностей virtualenv является опция --no-site-пакетов. Я не нашел эту опцию особенно полезной, так как использую сборку. Buildout управляет sys.path и включает только те пакеты, которые я прошу его включить. Она также включает все, что есть в системных пакетах Python, но так как у меня нет там ничего, что я использую в проектах, у меня никогда не бывает конфликтов.

Также, я нахожу, что --no-site-пакеты только мешают моему процессу разработки, потому что некоторые пакеты я устанавливаю, используя упаковочную систему моей системы sistem. Обычно, все, что содержит библиотеки Си, которые нужно скомпилировать, я устанавливаю через систему упаковок системы.

В файле.py fabfile.py проекта я включил функцию тестирования для проверки наличия системных пакетов, которые я устанавливаю через менеджер пакетов системы.

В общем, вот как я использую эти инструменты:

системный менеджер пакетов (apt-get, yam, port, fink ...). Я использую одну из них для установки нужных мне версий питона на этой системе. Я также использую его для установки таких пакетов, как lxml, которые включают библиотеки c.

easy_install Я использую для установки пакетов из pypi, которые я использую во всех проектах, но проекты не зависят от этих пакетов.

buildout Я использую для управления зависимостями проекта.

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

9
ответ дан 29 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: