¿Qué es un huevo de pitón?


532

Soy nuevo en Python y solo estoy tratando de entender cómo funcionan sus paquetes. Presumiblemente, los "huevos" son algún tipo de mecanismo de empaque, pero ¿cuál sería una descripción general rápida de qué papel juegan y puede ser alguna información sobre por qué son útiles y cómo crearlos?

Respuestas:


527

Nota: El empaque del huevo ha sido reemplazado por el empaque de la rueda.

El mismo concepto que un .jararchivo en Java, es un .ziparchivo con algunos archivos de metadatos renombrados .egg, para distribuir código como paquetes.

Específicamente: la estructura interna de los huevos de pitón

Un "huevo de Python" es una estructura lógica que incorpora el lanzamiento de una versión específica de un proyecto de Python, que comprende su código, recursos y metadatos. Hay múltiples formatos que se pueden usar para codificar físicamente un huevo de Python, y se pueden desarrollar otros. Sin embargo, un principio clave de los huevos de Python es que deben ser reconocibles e importables. Es decir, debería ser posible que una aplicación Python descubra fácil y eficientemente qué huevos están presentes en un sistema, y ​​para garantizar que los contenidos de los huevos deseados sean importantes.

El .eggformato se adapta bien a la distribución y la fácil desinstalación o actualizaciones de código, ya que el proyecto es esencialmente autónomo dentro de un único directorio o archivo, sin mezclar con el código o los recursos de cualquier otro proyecto. También hace posible tener múltiples versiones de un proyecto instaladas simultáneamente, de modo que los programas individuales puedan seleccionar las versiones que desean usar.


82

El .eggarchivo es un formato de distribución para paquetes Python. Es solo una alternativa a una distribución de código fuente o Windows exe. Pero tenga en cuenta que para puro Python, el .eggarchivo es completamente multiplataforma.

El .eggarchivo en sí es esencialmente un .ziparchivo. Si cambia la extensión a " zip", puede ver que tendrá carpetas dentro del archivo.

Además, si tiene un .eggarchivo, puede instalarlo como un paquete usandoeasy_install

Ejemplo: para crear un .eggarchivo para un directorio mymathque dice que puede tener varios scripts de Python, realice el siguiente paso:

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

Luego, desde la terminal hacer:

 $ python setup.py bdist_egg

Esto generará muchos resultados, pero cuando se complete, verá que tiene tres carpetas nuevas: build , dist y mymath.egg-info . La única carpeta que nos interesa es la carpeta dist donde encontrará su .eggarchivo, mymath-0.1-py3.5.eggcon su número de versión de python (instalación) predeterminado (el mío aquí: 3.5)

Fuente: blog de la biblioteca Python


3

Los huevos de Python son una forma de agrupar información adicional con un proyecto de Python, que permite verificar y satisfacer las dependencias del proyecto en tiempo de ejecución, así como también permite que los proyectos proporcionen complementos para otros proyectos. Hay varios formatos binarios que incorporan huevos, pero el más común es el formato zip .archivo '.egg', porque es conveniente para distribuir proyectos. Todos los formatos admiten, incluidos datos específicos del paquete, metadatos de todo el proyecto, extensiones C y código Python.

La forma más fácil de instalar y usar Python eggs es usar el administrador de paquetes Python "Easy Install", que encontrará, descargará, compilará e instalará los huevos por usted; todo lo que debe hacer es decirle el nombre (y, opcionalmente, la versión) de los proyectos de Python que desea usar.

Los huevos de Python se pueden usar con Python 2.3 y versiones posteriores, y se pueden construir utilizando el paquete setuptools (consulte el sandbox de Python Subversion para obtener el código fuente o la página EasyInstall para obtener las instrucciones de instalación actuales).

Los principales beneficios de Python Eggs son:

  • Permiten herramientas como el administrador de paquetes Python "Easy Install"

  • Los archivos .egg son un formato de "instalación cero" para un paquete de Python; no se requiere ningún paso de compilación o instalación, solo póngalos en PYTHONPATH o sys.path y úselos (puede requerir el tiempo de ejecución instalado si se usan extensiones C o archivos de datos)

  • Pueden incluir metadatos del paquete, como los otros huevos de los que dependen

  • Permiten que los "paquetes de espacio de nombres" (paquetes que solo contienen otros paquetes) se dividan en distribuciones separadas (por ejemplo, zope. , Twisted. paquetes , Peak. * Se pueden distribuir como huevos separados, a diferencia de los paquetes normales que siempre deben colocarse bajo el mismo directorio principal. Esto permite que lo que ahora son enormes paquetes monolíticos se distribuyan como componentes separados).

  • Permiten que las aplicaciones o las bibliotecas especifiquen la versión necesaria de una biblioteca, por lo que puede, por ejemplo, requerir ("Twisted-Internet> = 2.0") antes de realizar una importación twisted.internet.

  • Son un excelente formato para distribuir extensiones o complementos a aplicaciones y marcos extensibles (como Trac, que utiliza los huevos para complementos a partir de 0.9b1), porque el tiempo de ejecución de huevo proporciona API simples para localizar huevos y encontrar sus puntos de entrada anunciados (similar al concepto de "punto de extensión" de Eclipse).

También hay otros beneficios que pueden venir de tener un formato estandarizado, similar a los beneficios del formato "jar" de Java.


¿Es Python Egg una versión específica? es decir, huevo construido para 2 vs 3? o incluso versiones menores? ex 2.x
ealeon

1

"Egg" es un formato de distribución importable de un solo archivo para proyectos relacionados con Python.

"La Guía rápida de los huevos de Python" señala que "los huevos son para las pitones como los frascos para Java ..."

Los huevos en realidad son más ricos que los frascos; contienen metadatos interesantes, como detalles de licencias, dependencias de lanzamiento, etc.


El enlace está muerto a partir de hoy.
Perfi

@Perfi Link funciona para mí.
Klik

¡Es curioso cómo funciona a veces! Está de vuelta en línea. Me alegro de verlo :)
Perfi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.