Я сделал несколько исследований по этой теме (за пару недель), прежде чем приступать к использованию buildout для всех моих проектов.
DistUtils и EasyInstall в дополнение к строительству!
Трудность создания одного места для сравнения всех этих инструментов заключается в том, что они все являются частью одной и той же цепочки инструментов и используются вместе для создания предсказуемого, надежного и гибкого набора инструментов.
Например, easy_install используется для установки пакетов distutils из pypi (cheeseshop) в каталог вашего сайта Python. Это значительно упрощает установку пакетов на ваш системный/глобальный sys.path.
easy_install очень удобен для пакетов, совместимых для всех проектов. Но я считаю, что предпочитаю использовать easy_install системы для установки пакетов, от которых не зависят проекты. Например, github-cli Я использую с каждым проектом, потому что он позволяет мне взаимодействовать с проблемами Github проекта из командной строки. Я использую это с проектами, но это для удобства, и сам проект не имеет зависимости от этого пакета.
Для управления зависимостями проекта я использую buildout. Buildout позволяет вам конкретно указать, из какой версии пакетов зависит ваш проект. Я предпочитаю buildout over pip-requirements.txt, потому что buildout является декларативным. С помощью pip вы устанавливаете пакеты, а в конце разработки вы создаете файл requirements.txt. С помощью Buildout, с другой стороны, вы изменяете buildout.cfg перед тем, как яйцо пакета добавляется в ваш проект. Это заставляет меня осознавать, какие пакеты я добавляю в проект.
Теперь есть вопрос virtualenv. Одна из наиболее популярных функций virtualenv - это, очевидно, --no-site-packages. Я не нашел этот вариант особенно полезным, потому что я использую buildout. Buildout управляет sys.path и включает только те пакеты, которые я прошу, чтобы он включал. Он также включает все в пакетные пакеты Python, но поскольку у меня нет ничего, что я использую в проектах, у меня никогда не было конфликтов.
Кроме того, я обнаружил, что -no-site-пакеты только мешают моему процессу разработки, потому что некоторые пакеты устанавливаются с использованием системы упаковки sistem. Как правило, все, что имеет библиотеки C, которые необходимо скомпилировать, я устанавливаю через систему упаковки системы.
В проекте fabfile.py Я включаю тестовую функцию для проверки наличия системных пакетов, которые устанавливаю через диспетчер пакетов системы.
В общем, вот как я использую эти инструменты:
диспетчера пакетов системы (APT-получить, ямс, порт, стукач ...) я использую один из них установить версии питона, которые я необходимости в этой системе. Я также использую его для установки пакетов, таких как lxml, которые включают библиотеки c.
easy_install Я использую для установки пакетов из PyPI, которые я использую на все проекты, но проекты не зависят от этих пакетов.
buildout Используется для управления зависимостями проекта.
По моему опыту этот рабочий процесс был очень гибким, портативным и легким в работе.
В плане развертывания, по-видимому, сложнее, чем в типичном пакете сегодня. Яйца, легко это и виртуально, что ... извините, но я намного счастливее, копируя файлы .py в место на sys.path. По крайней мере, я вижу, что происходит и не вызывает необъяснимых ошибок при развертывании и импорте. – bobince
Никто еще не упомянул 'distutils2' против' distutils' и 'bento' ... – Brendan
Этот ответ, который я написал, ответит на часть вопроса: http://stackoverflow.com/a/6522905/821378 –