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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
27
0
9 806
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

"Eggs are to Pythons as Jars are to Java..."

Python eggs are a way of bundling additional information with a Python project, that allows the project's dependencies to be checked and satisfied at runtime, as well as allowing projects to provide plugins for other projects. There are several binary formats that embody eggs, but the most common is '.egg' zipfile format, because it's a convenient one for distributing projects. All of the formats support including package-specific data, project-wide metadata, C extensions, and Python code.

The primary benefits of Python Eggs are:

  • They enable tools like the "Easy Install" Python package manager

  • .egg files are a "zero installation" format for a Python package; no build or install step is required, just put them on PYTHONPATH or sys.path and use them (may require the runtime installed if C extensions or data files are used)

  • They can include package metadata, such as the other eggs they depend on

  • They allow "namespace packages" (packages that just contain other packages) to be split into separate distributions (e.g. zope., twisted., peak.* packages can be distributed as separate eggs, unlike normal packages which must always be placed under the same parent directory. This allows what are now huge monolithic packages to be distributed as separate components.)

  • They allow applications or libraries to specify the needed version of a library, so that you can e.g. require("Twisted-Internet>=2.0") before doing an import twisted.internet.

  • They're a great format for distributing extensions or plugins to extensible applications and frameworks (such as Trac, which uses eggs for plugins as of 0.9b1), because the egg runtime provides simple APIs to locate eggs and find their advertised entry points (similar to Eclipse's "extension point" concept).

  • There are also other benefits that may come from having a standardized format, similar to the benefits of Java's "jar" format.

-Адам

Но что, если в зависимые пакеты Python не загружены двоичные яйца в PyPi?

Mitar 15.06.2012 19:24

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

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

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

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

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

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

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

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

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

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

Но что, если в зависимые пакеты Python не загружены двоичные яйца в PyPi?

Mitar 15.06.2012 19:23

Они просто оставляют проблему «иметь компилятор». Волшебного решения нет: либо у вас есть предварительно скомпилированные пакеты / яйца, либо нет.

Reinout van Rees 16.06.2012 22:35

Да, у меня есть предварительно скомпилированный пакет / яйцо, но как насчет зависимостей? Есть ли способ сказать, что если яйцо недоступно в PyPi, используйте этот и этот репозиторий?

Mitar 17.06.2012 02:24

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