Что такое яйцо питона?


532

Я новичок в Python и просто пытаюсь понять, как работают его пакеты. Предположительно, «яйца» являются своего рода механизмом упаковки, но каков будет краткий обзор их роли и может быть информация о том, почему они полезны и как их создать?

Ответы:


527

Примечание: упаковка для яиц была заменена упаковкой для колес.

То же самое понятие, что и .jarфайл в Java, это .zipфайл с переименованными файлами метаданных .eggдля распространения кода в виде пакетов.

В частности: внутренняя структура яиц Python

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

.eggФормат хорошо подходит для распределения и легкого удаления или обновления кода, так как проект, по существу , самодостаточным в пределах одного файла или каталога, unmingled с кодом или ресурсами любых других проектов. Это также позволяет одновременно устанавливать несколько версий проекта, так что отдельные программы могут выбирать версии, которые они хотят использовать.


82

.eggФайл представляет собой формат распределения пакетов Python. Это просто альтернатива дистрибутиву исходного кода или Windows exe. Но обратите внимание , что для чистого Python, то .eggфайл полностью кросс-платформенным.

Сам .eggфайл по сути является .zipфайлом. Если вы измените расширение на « zip», вы увидите, что у него будут папки внутри архива.

Кроме того, если у вас есть .eggфайл, вы можете установить его как пакет, используяeasy_install

Пример. Чтобы создать .eggфайл для каталога, скажем, mymathкоторый может содержать несколько сценариев Python, выполните следующий шаг:

# setup.py
from setuptools import setup, find_packages
setup(
    name = "mymath",
    version = "0.1",
    packages = find_packages()
    )

Затем из терминала выполните:

 $ python setup.py bdist_egg

Это сгенерирует много выходных данных, но по завершении вы увидите, что у вас есть три новые папки: build , dist и mymath.egg-info . Единственная папка, в которой мы заинтересованы, это папка dist, в которой вы найдете свой .eggфайл mymath-0.1-py3.5.eggс номером версии Python (установка) по умолчанию (у меня здесь: 3.5)

Источник: блог библиотеки Python


3

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

Самый простой способ установки и использования яиц Python - это использование менеджера пакетов Python "Easy Install", который найдет, загрузит, соберет и установит яйца; все, что вам нужно сделать, это сообщить ему имя (и, опционально, версию) проекта (ов) Python, которые вы хотите использовать.

Яйца Python могут использоваться с Python 2.3 и выше, и могут быть собраны с помощью пакета setuptools (см. «Песочницу» Python Subversion для исходного кода или страницу EasyInstall для текущих инструкций по установке).

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

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

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

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

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

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

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

Существуют также другие преимущества, которые могут возникнуть из-за наличия стандартизированного формата, аналогичного преимуществам формата jar «jar».


является ли python egg конкретной версией? то есть яйцо построено для 2 против 3? или даже минорные версии? бывший 2.x
Ealeon

1

«Яйцо» - это импортируемый формат распространения одного файла для проектов, связанных с Python.

«Краткое руководство по яйцам Python» отмечает, что «Яйца для питонов, как банки для Java ...»

Яйца на самом деле богаче, чем банки; они содержат интересные метаданные, такие как детали лицензирования, зависимости релизов и т. д.


Ссылка на сегодня мертва.
Perfi

@ Perfi Link работает для меня.
Клик

Забавно, как это иногда работает! Он вернулся в онлайн. Рад это видеть :)
Perfi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.