2011-12-18 19 views
39

Me he estado enseñando a mí mismo Python a través del libro "Aprenda Python The Hard Way" (2da Edición). En el ejercicio 46, me dijo que leyera sobre Pip, Distribuir y algunos otros paquetes.¿Cómo se relacionan las herramientas de configuración, distribución y pip entre sí?

La documentación para pip fue lo suficientemente clara. Me permite instalar/desinstalar y actualizar paquetes. La lectura de la documentación para distribuir, que básicamente se parece hacer la misma cosa:

fácilmente descargar, construir, instalar, actualizar y desinstalar paquetes de Python

¿Cuál es la diferencia entre PIP y distribuir, y cómo se relacionan con ¿unos y otros?

+0

Relacionados: http://stackoverflow.com/questions/6344076/differences-between-distribute-distutils-setuptools-and-distutils2 – guettli

Respuesta

69

[2014-10 TL; DR: distribute está muerto, utilice pip, el nuevo setuptools, y, para las distribuciones binarias, wheels. Más abajo.]


[Respuesta original]

Distribute es fue un tenedor de la mayor setuptools tan casi todos los comentarios que siguen se aplican por igual a Distribuir y setuptools. Setuptools fue un intento de completar una serie de agujeros en el paquete de biblioteca estándar de Python aún más antiguo, Distutils. Setuptools agregó funciones como descargas automáticas de paquetes a través de una interfaz de línea de comandos, easy_install, y algún nivel de administración de dependencias. Sin embargo, un segmento de la comunidad de Python es de la opinión de que las herramientas de configuración son demasiado intrusivas y tienen demasiada magia detrás de las escenas para algunas de sus características.

pip es una interfaz de nivel superior encima de las herramientas de configuración o Distribuir. Los usa para realizar muchas de sus funciones pero evita algunas de sus características más controvertidas, como los huevos con cremallera. pip también proporciona funciones no disponibles en setuptools, como un comando de desinstalación y la capacidad de definir conjuntos fijos de requisitos y reproducir de forma confiable un conjunto de paquetes. Hay una comparación de características más completa here.

¿Por qué hay tantos componentes (y hay más, como buildout)? Muchos motivos: las soluciones deben funcionar en todas las plataformas principales en las que se admite Python (es decir, Unix-y, Windows, Mac OS X), por lo que el edificio y la instalación presentan un conjunto de problemas complejo; al igual que muchos proyectos de código abierto, Python es esencialmente todo voluntario y muchos desarrolladores simplemente no están tan interesados ​​en los problemas de embalaje e instalación; existe un conservadurismo natural acerca de agregar nuevas características principales no probadas a la biblioteca estándar; diferencias en opiniones, etc. etc.

Por el momento, hay un proyecto en curso para proporcionar un reemplazo para Distutils y posiblemente para algunos de los complementos de nivel superior. Está previsto que se publique en la biblioteca estándar de Python 3.3 como el paquete packaging y como un complemento para las versiones anteriores de Python como Distutils2.

En resumen, la relación actual es:

pip -> [ setuptools | Distribute ] -> Distutils -> Python core 
            | 
    3rd party packages    |  included in Python 
            | 

ACTUALIZACIÓN (2012-07): Antes de la función de código de corte para Python 3.3, se decidió que packaging aún no estaba lista para su lanzamiento en la biblioteca estándar por lo que se ha eliminado de la versión 3.3. El trabajo continuará en Distutils2, que está disponible a través de PyPI y en lo que se incluirá en la biblioteca estándar para Python 3.4.


ACTUALIZACIÓN (2014-10): Ha habido más cambios en el mundo de los envases Python ya que esta respuesta fue actualizada por última vez.

  • Lo más importante, desde mediados de 2013, la brecha entre setuptools y distribute se ha curado y actividad de desarrollo has been merged into a new setuptools project. distribute ahora es en desuso y ya no se mantiene; utilice el nuevo setuptools en su lugar pero no use su easy_install como instalador.

  • pip se ha convertido en la herramienta de instalación de-facto y bendita (para Python paquetes no provistos de otra manera por el administrador de paquetes de su plataforma) ya sea dentro o fuera de los entornos virtuales (virtualenv o pyvenv).

  • En lugar de la vieja setuptools bdist eggs, wheels han convertido en el formato distribución binaria bendito por los paquetes de Python.

  • As of Python 3.4, a version of pip con wheel apoyo ahora se envían con los python.org instaladores binarios oficiales y paquetes fuente y se prevé que pip También habrá incluido en el next maintenance release of Python 2.7 (2.7.9).

  • Distutils2 y packaging están inactivos.

Más detalles en la nueva sección Distributing Python Modules de los Python 3 documentos y la nueva Python Packaging User Guide.

+1

¡Esa es una gran explicación, gracias! Vengo de un fondo de PHP, así que es abrumador ver cuántos módulos/paquetes superpuestos tienes que entender. – babonk

+0

Haciendo el mismo tutorial y sus consejos ayudaron mucho. Gracias Ned. –

+0

Ha habido un * lote * de cambios en el mundo de empaque de Python desde la respuesta original. Vea la última actualización para obtener más información actual. –

Cuestiones relacionadas