python - find_packages - upload to pypi
¿Cómo se relacionan las herramientas de configuración, distribución y pip entre sí? (1)
Me he estado enseñando Python a través del libro "Learn Python The Hard Way" (2da Edición). En el ejercicio 46, me dijo que leyera sobre Pip, Distribuir y algunos otros paquetes.
La documentación para pip fue lo suficientemente clara. Me permite instalar / desinstalar y actualizar paquetes. Al leer la documentación para distribuir, básicamente parece hacer lo mismo:
Descargue, cree, instale, actualice y desinstale paquetes de Python fácilmente
¿Cuál es la diferencia entre pip y distribuir, y cómo se relacionan entre sí?
[ 2014-10 TL; DR: distribute
is dead, use pip
, las nuevas setuptools
y, para las distribuciones binarias, las wheels
. Más abajo.]
[Respuesta original]
Distribute es era una bifurcación de las setuptools más setuptools por lo que casi todos los comentarios que siguen se aplican por igual a Distribuir y configurar herramientas. Setuptools fue un intento de completar una serie de agujeros en el paquete de biblioteca estándar de Python, 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 además 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 las setuptools
de 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. Aquí hay una comparación de características más completa.
¿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 la construcción y la instalación presentan un complejo conjunto de problemas; 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 de packaging
y como un complemento para versiones anteriores de Python como Distutils2
.
Para resumir, la relación actual es:
pip -> [ setuptools | Distribute ] -> Distutils -> Python core
|
3rd party packages | included in Python
|
ACTUALIZACIÓN (2012-07) : antes del corte del código de característica para Python 3.3, se decidió que el packaging
aún no estaba listo para su lanzamiento en la biblioteca estándar, por lo que se eliminó 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): se han producido más cambios en el mundo de los paquetes de Python desde la última actualización de esta respuesta.
Lo que es más importante, desde mediados de 2013, la brecha entre
setuptools
ydistribute
ha sido curada y la actividad de desarrollo se ha fusionado en un nuevo proyecto desetuptools
.distribute
ahora está en desuso y ya no se mantiene; utilice las nuevassetuptools
ensetuptools
lugar, pero no use sueasy_install
como instalador.pip
ha convertido en la herramienta de instalación de facto y bendecida (para paquetes Python no provistos por el administrador de paquetes de su plataforma) dentro o fuera de los entornosvirtualenv
(virtualenv
opyvenv
).En lugar de las antiguas
setuptools
bdisteggs
, laswheels
han convertido en el bendito formato de distribución binaria para los paquetes de Python.A partir de Python 3.4 , ahora se incluye una versión de
pip
con soporte dewheel
con los instaladores binarios oficiales depython.org
y paquetes fuente, y se anticipa que también se incluirápip
en la próxima versión de mantenimiento de Python 2.7 (2.7.9).Distutils2
y elpackaging
ahora están inactivos.
Más detalles en la nueva sección Distributing Python Modules de los documentos de Python 3 y la nueva Guía de usuario de Python Packaging .