Каковы преимущества упаковки вашей библиотеки/приложения Python в виде файла .egg?

Я кое-что читал о файлах .egg и заметил их в своем каталоге lib, но каковы преимущества/недостатки их использования в качестве разработчика?


person minty    schedule 06.09.2008    source источник


Ответы (6)


Из сообщества Python Enterprise Application Kit:

"Яйца для питонов то же, что банки для Java..."

Яйца Python — это способ объединения дополнительной информации с проектом Python, который позволяет проверять и удовлетворять зависимости проекта во время выполнения, а также позволяет проектам предоставлять подключаемые модули для других проектов. Существует несколько двоичных форматов, в которых содержатся яйца, но наиболее распространенным является формат zip-файла «.egg», поскольку он удобен для распространения проектов. Поддерживаются все форматы, включая данные для конкретных пакетов, метаданные для всего проекта, расширения C и код Python.

Основные преимущества Python Eggs:

  • Они включают такие инструменты, как менеджер пакетов Python Easy Install.

  • Файлы .egg представляют собой формат «нулевой установки» для пакета Python; не требуется никаких шагов сборки или установки, просто поместите их в PYTHONPATH или sys.path и используйте их (может потребоваться установленная среда выполнения, если используются расширения C или файлы данных)

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

  • Они позволяют разделять «пакеты пространства имен» (пакеты, которые просто содержат другие пакеты) на отдельные дистрибутивы (например, пакеты zope., twisted., pick.* могут распространяться как отдельные яйца, в отличие от обычных пакетов, которые должны всегда размещаться в одном и том же родительском каталоге, что позволяет распространять огромные монолитные пакеты как отдельные компоненты.)

  • Они позволяют приложениям или библиотекам указывать необходимую версию библиотеки, чтобы вы могли, например. require("Twisted-Internet>=2.0") перед выполнением импорта twisted.internet.

  • Это отличный формат для распространения расширений или подключаемых модулей для расширяемых приложений и фреймворков (таких как Trac, который использует яйца для подключаемых модулей начиная с версии 0.9b1), поскольку среда выполнения яиц предоставляет простые API-интерфейсы для обнаружения яиц и их объявленных точек входа (аналогично к концепции «точки расширения» Eclipse).

  • Имеются и другие преимущества стандартизированного формата, аналогичные преимуществам формата "jar" в Java.

-Адам

person Adam Davis    schedule 06.09.2008
comment
Но что, если у зависимых пакетов Python нет загруженных в PyPi двоичных яиц? - person Mitar; 15.06.2012

Одно яйцо само по себе не лучше, чем правильный исходный код. Хорошая часть — это обработка зависимостей. Подобно пакетам debian или rpm, вы можете сказать, что зависите от других яиц, и они будут установлены автоматически (через pypi.python.org< /а>).

Второй комментарий: формат яйца сам по себе является упакованным бинарным форматом. Обычные пакеты Python, состоящие только из кода Python, лучше всего распространять как «исходные версии», поэтому «python setup.py sdist» приводит к созданию файла .tar.gz. Их также обычно называют «яйцами» при загрузке в pypi.

Где вам нужны двоичные яйца: когда вы связываете какое-то расширение кода C. Тогда вам понадобится несколько бинарных яиц (32-битное unix, windows и т. д.).

person Reinout van Rees    schedule 13.10.2008
comment
Но что, если у зависимых пакетов Python нет загруженных в PyPi двоичных яиц? - person Mitar; 15.06.2012
comment
Они просто сохраняют проблему необходимости иметь компилятор. Волшебного решения нет: либо у вас есть предварительно скомпилированные пакеты/яйца, либо нет. - person Reinout van Rees; 16.06.2012
comment
Да, у меня есть предварительно скомпилированный пакет/яйцо, но как насчет зависимостей? Есть ли способ сказать, что если яйцо недоступно на PyPi, используйте этот и этот репозиторий? - person Mitar; 17.06.2012

Яйца — довольно хороший способ распространения приложений Python. Думайте об этом как о независимом от платформы файле .deb, который установит все зависимости и еще много чего. Преимущество в том, что он прост в использовании для конечного пользователя. Недостатком является то, что упаковать ваше приложение в виде файла .egg может быть обременительно.

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

person Jason Baker    schedule 06.09.2008

Файлы .egg — это, по сути, хороший способ развернуть ваше приложение Python. Вы можете думать об этом как о файлах .jar для Java.

Подробнее здесь.

person cschol    schedule 06.09.2008

Что бы вы ни делали, не прекращайте распространять ваше приложение также в виде архива, так как это самый простой упаковываемый формат для операционных систем с системным пакетом.

person pupeno    schedule 26.09.2008

Для простых программ Python вам, вероятно, не нужно использовать яйца. Распространения необработанных файлов .py должно быть достаточно; это похоже на распространение исходных файлов для GNU/Linux. Вы также можете использовать различные «упаковщики» ОС (такие как py2exe или py2app) для создания .exe, .dmg или других файлов для разных операционных систем.

Более сложные программы, например. Джанго, в значительной степени требуют яйца из-за различных требуемых модулей и зависимостей.

person crystalattice    schedule 26.09.2008