python egg sdist

¿Cuál es la diferencia entre una distribución ''sdist''.tar.gz y un huevo de python?



egg (2)

Hay muchos más de dos tipos diferentes de paquetes Python (distribución). Este comando enumera muchos subcomandos:

$ python setup.py --help-commands

Observe los diferentes tipos de bdist diferentes.

Un huevo era un nuevo tipo de paquete, introducido por setuptools pero luego adoptado por la biblioteca estándar. Está destinado a ser instalado monolítico en sys.path . Esto difiere de un paquete sdist que está destinado a hacer que se setup.py install , copiando cada archivo en su lugar y tal vez tomando otras acciones también (construyendo módulos de extensión, ejecutando código de Python arbitrario adicional incluido en el paquete).

Los huevos son en gran parte obsoletos en este momento en el tiempo. El formato de empaquetado preferido ahora es el formato de "rueda".

Si crea un sdist o un egg (o wheel) es independiente de si podrá declarar qué dependencias tiene el paquete (para que PyPI las descargue automáticamente en el momento de la instalación). Todo lo que es necesario para que funcione esta función de dependencia es que usted declare las dependencias utilizando las API adicionales proporcionadas por distribuye (el sucesor de setuptools) o distutils2 (el sucesor de distutils, también conocido como empaquetado en la versión de desarrollo actual de Python 3. X).

https://packaging.python.org/ es un buen recurso para obtener más información sobre el empaquetado. Cubre algunos de los extras_require específicos de la declaración de dependencias (por ejemplo, install_requires pero no extras_require afaict).

Estoy un poco confundido. Parece que hay dos tipos diferentes de paquetes Python, distribuciones de origen (setup.py sdist) y distribuciones de huevo (setup.py bdist_egg).

Ambos parecen ser solo archivos con los mismos datos, los archivos fuente de python. Una diferencia es que pip , el administrador de paquetes más recomendado, no puede instalar huevos.

¿Cuál es la diferencia entre los dos y cuál es "la" manera de distribuir mis paquetes?

(Tenga en cuenta que no deseo distribuir mis paquetes a través de PyPI, pero quiero usar un administrador de paquetes que recupere mis dependencias de PyPI)


setup.py sdist crea una distribución de origen : contiene setup.py, los archivos de origen de su módulo / script (archivos .py o .c / .cpp para módulos binarios), sus archivos de datos, etc. El resultado es un archivo que Luego se puede utilizar para recompilar todo en cualquier plataforma.

setup.py bdist (y bdist_* ) crea una distribución construida : incluye archivos .pyc, .so / .dll / .dylib para módulos binarios, .exe si usa py2exe en Windows, sus archivos de datos ... pero no hay configuración. py. El resultado es un archivo que es específico de una plataforma (por ejemplo, linux-x86_64 ) y de una versión de Python, y que se puede instalar simplemente extrayéndolo en la raíz de su sistema de archivos (los ejecutables están en / usr / bin (o equivalente), archivos de datos en / usr / share, módulos en /usr/lib/pythonX.X/site-packages / ...). Incluso puede crear archivos rpm que se pueden instalar directamente usando su administrador de paquetes.