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






Из Сообщество 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.
-Адам
Файлы .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?
Они просто оставляют проблему «иметь компилятор». Волшебного решения нет: либо у вас есть предварительно скомпилированные пакеты / яйца, либо нет.
Да, у меня есть предварительно скомпилированный пакет / яйцо, но как насчет зависимостей? Есть ли способ сказать, что если яйцо недоступно в PyPi, используйте этот и этот репозиторий?
Но что, если в зависимые пакеты Python не загружены двоичные яйца в PyPi?