¿Por qué usar pip sobre easy_install? [cerrado]

936

Un tweet dice:

No uses easy_install, a menos que te guste apuñalarte en la cara. Use pepita.

¿Por qué usar pip sobre easy_install? ¿No es la culpa principalmente de PyPI y los autores de paquetes ? Si un autor carga un tarball fuente de basura (por ejemplo: archivos faltantes, no setup.py) a PyPI, entonces pip y easy_install fallarán. Además de las diferencias estéticas, ¿por qué las personas de Python (como en el tweet anterior) parecen favorecer fuertemente a pip sobre easy_install?

(Supongamos que estamos hablando de easy_install desde el paquete Distribute, que es mantenido por la comunidad)

Sridhar Ratnakumar
fuente
74
Antes de ver esta pregunta, respondí una no relacionada diciendo "no use easy_install, use pip". Ahora me pregunto por qué dije eso ...
Daniel Roseman
21
Todavía me encuentro con paquetes que hacen que pip falle, pero easy_install se maneja bien, así que también tengo curiosidad por esto.
kwatford
55
pyobjc-core es un ejemplo de un paquete que funciona con easy_install pero no con pip.
Marc Abramowitz
55
Volviendo a Python cuatro años más tarde, el estado del empaque está más allá de la confusión. Es 2014 y solo empeoró. Por lo que entiendo, setuptools absorbió distutils, a pesar de que los documentos oficiales de Python son ajenos a esto, pero ninguno de los dos será parte de Python 3 , y pip está dando vueltas como una tercera rueda (juego de palabras).
Andriy Drozdyuk
3
@drozzy: Por casualidad volviste en el peor momento posible, justo después de que un grupo de desarrolladores principales decidieron que las cosas se habían vuelto tan desastrosas que tuvieron que involucrarse en la solución del problema. setuptoolsno es parte de Python 3 porque sí pip, y esa es la única parte que los usuarios finales necesitan. (Y los desarrolladores que quieran distribuir en PyPI obviamente pueden pip install setuptools, y todo lo que quieran)
Abarnert

Respuestas:

304

Muchas de las respuestas aquí están desactualizadas para 2015 (aunque la respuesta inicialmente aceptada de Daniel Roseman no lo está). Aquí está el estado actual de las cosas:

  • Los paquetes binarios ahora se distribuyen como ruedas ( .whlarchivos), no solo en PyPI, sino también en repositorios de terceros como los Paquetes de extensión de Christoph Gohlke para Windows . pippuede manejar ruedas; easy_installno puedo.
  • Los entornos virtuales (que vienen integrados con 3.4, o se pueden agregar a 2.6 + / 3.1 + con virtualenv) se han convertido en una herramienta muy importante y destacada (y recomendada en los documentos oficiales ); incluyen pipfuera de la caja, pero ni siquiera funcionan correctamente con easy_install.
  • El distributepaquete que incluye easy_installya no se mantiene. Sus mejoras setuptoolsse fusionaron nuevamente setuptools. Intentar instalar distributesolo se instalará en su setuptoolslugar.
  • easy_install en sí solo es cuasi mantenido.
  • Todos los casos en los que pipsolía ser inferior a la easy_installinstalación desde un árbol fuente desempaquetado, desde un repositorio DVCS, etc., han desaparecido hace mucho tiempo; que pueda pip install ., pip install git+https://.
  • pipviene con los paquetes oficiales Python 2.7 y 3.4+ de python.org, y pipse incluye un bootstrap por defecto si compila desde la fuente.
  • La Guía del usuario de Python Packaging ha reemplazado los diversos fragmentos incompletos de documentación sobre la instalación, el uso y la creación de paquetes . La propia documentación de Python sobre la instalación de módulos de Python ahora difiere de esta guía del usuario, y explícitamente lo llama pip"el programa instalador preferido".
  • A lo piplargo de los años se han agregado otras características nuevas que nunca estarán disponibles easy_install. Por ejemplo, pipfacilita la clonación de los paquetes de su sitio al crear un archivo de requisitos y luego instalarlo con un solo comando en cada lado. O para convertir su archivo de requisitos a un repositorio local para utilizarlo en el desarrollo interno. Y así.

La única buena razón que sé usar easy_installen 2015 es el caso especial de usar las versiones preinstaladas de Python de Apple con OS X 10.5-10.8. Desde 10.5, Apple ha incluido easy_install, pero a partir de 10.10 todavía no lo incluyen pip. Con 10.9+, aún debe usar get-pip.py, pero para 10.5-10.8, esto tiene algunos problemas, por lo que es más fácil sudo easy_install pip. (En general, easy_install pipes una mala idea; es solo para OS X 10.5-10.8 que desea hacer esto). Además, 10.5-10.8 incluye readlinede una manera que easy_installsabe cómo esquivar pero pipno lo hace, por lo que también desea sudo easy_install readlinesi quieres actualizar eso.

abarnert
fuente
99
@drozzy: Quizás. Pero considere que en otros 5 años, mi respuesta estará tan desactualizada como todas las demás, mientras que Daniel Roseman es atemporal. Además, mi respuesta no sería tan buena si no pudiera basarse en señalar una respuesta aceptada de 5 años que demuestre por qué la comunidad Python se retrasó pipen el tiempo intermedio.
abarnert
2
Vale la pena señalar que algunas versiones empaquetadas de pip tenían errores, y pip no pudo actualizarse. Ya sea que lo consideres irónico o no, en esos casos la solución más fácil es hacerlo easy_install -U pipo no easy_install3 -U pip.
analytik
"pero ni siquiera funciona correctamente con easy_install" Esta no fue mi experiencia, aunque no lo he intentado en mucho tiempo desde que las ruedas ahora dominan. Pero los binarios de Christoph Gohlke solían distribuirse como huevos ejecutables. Visitarlos easy_installfue la única forma en que pude instalar esos paquetes en un entorno virtual, y nunca me causó ningún ardor de estómago. ¿De qué manera easy_installya no funciona con envs virtuales?
jpmc26
599

De la propia introducción de Ian Bicking a pip :

pip se escribió originalmente para mejorar easy_install de las siguientes maneras

  • Todos los paquetes se descargan antes de la instalación. La instalación parcialmente completada no se produce como resultado.
  • Se tiene cuidado de presentar resultados útiles en la consola.
  • Se siguen los motivos de las acciones. Por ejemplo, si se está instalando un paquete, pip realiza un seguimiento de por qué se requirió ese paquete.
  • Los mensajes de error deberían ser útiles.
  • El código es relativamente conciso y coherente, lo que facilita su uso mediante programación.
  • Los paquetes no tienen que instalarse como archivos de huevo, pueden instalarse planos (manteniendo los metadatos del huevo).
  • Soporte nativo para otros sistemas de control de versiones (Git, Mercurial y Bazaar)
  • Desinstalación de paquetes.
  • Fácil de definir conjuntos fijos de requisitos y reproducir de manera confiable un conjunto de paquetes.
Daniel Roseman
fuente
63
La ventaja de los "mensajes de error" es enorme, especialmente para los usuarios más nuevos. Easy-install es famoso por escupir docenas de lo que parecen errores fatales, solo por haber terminado haciendo la instalación con éxito de todos modos, lo que hace que sea difícil de usar hasta que aprendas a ignorar casi todo lo que dice. Pip simplemente omite decir esas cosas en primer lugar.
Brandon Rhodes el
1
@Glyph, ¿hay alguna ventaja al usar easy_install pipover sudo apt-get install python-pip?
Dennis
2
No utilice easy_install fuera de virtualenv en distribuciones basadas en paquetes: workaround.org/easy-install-debian
Federico
11
@Dennis: cuando se usa sudo apt-getUbuntu / Debian, se instalarán paquetes de Python, /usr/lib/python/dist-packagesmientras que sudo pipo sudo easy_installse instalarán /local/lib/python/site-packagesy, desafortunadamente, los paquetes Debian / Ubuntu a menudo tienen nombres diferentes con los que pip no está familiarizado. La mejor solución en mi humilde opinión es utilizar virtualenv e pipinstalar sus paquetes allí.
Mark Mikofski el
2
Esto necesita una actualización.
Andriy Drozdyuk
248

Otra razón, hasta ahora no mencionada, para favorecer el pip es porque es el nuevo calor y continuará usándose en el futuro.

La siguiente infografía, de la sección Estado actual de empaquetado en la Guía del autoestopista para empaques v1.0, muestra que setuptools / easy_install desaparecerá en el futuro.

ingrese la descripción de la imagen aquí

Aquí hay otra infografía de distribuir de la documentación que demuestra que Setuptools y easy_install será reemplazado por el nuevo hotness- distribuir y PIP . Si bien pip sigue siendo el nuevo atractivo, Distribute se fusionó con Setuptools en 2013 con el lanzamiento de Setuptools v0.7.

ingrese la descripción de la imagen aquí

Matthew Rankin
fuente
47
Infografía FTW
WineSoaked
34
OTOH, el segundo gráfico ha estado desactualizado por un año. distribuir llegará al final de su vida útil y será reemplazado por distutils2 (que también estará en la biblioteca estándar de Python a partir de 3.3). Se proporciona un instalador básico llamado pysetup como parte o distutils2, y pip continuará proporcionando características adicionales además de distutils2 en el futuro.
Éric Araujo
77
Dios mío, muchas gracias. He estado confundido por el empaquetado de Python durante años y es alentador ver un camino semi-autorizado hacia adelante.
aaron
21
Esta "respuesta" está tan desactualizada y simplemente equivocada que ni siquiera es graciosa.
onlynone
172

Dos razones, puede haber más:

  1. pip proporciona un uninstallcomando

  2. Si una instalación falla en el medio, pip lo dejará en un estado limpio.

Ned Batchelder
fuente
1
También lo hace setuptoools ahora. Erm ... algo así. pythonhosted.org/setuptools/…
Andriy Drozdyuk
116

REQUISITOS archivos.

En serio, uso esto junto con virtualenv todos los días.


TUTORIAL DE GESTIÓN RÁPIDA DE LA DEPENDENCIA, SIGUIENTE

Los archivos de requisitos le permiten crear una instantánea de todos los paquetes que se han instalado a través de pip. Al encapsular esos paquetes en un entorno virtual, puede hacer que su base de código funcione con un conjunto de paquetes muy específico y compartir esa base de código con otros.

De la documentación de Heroku https://devcenter.heroku.com/articles/python

Creas un entorno virtual y configuras tu shell para usarlo. (instrucciones bash / * nix)

virtualenv env
source env/bin/activate

Ahora todos los scripts de Python que se ejecutan con este shell utilizarán los paquetes y la configuración de este entorno. Ahora puede instalar un paquete localmente en este entorno sin necesidad de instalarlo globalmente en su máquina.

pip install flask

Ahora puede volcar la información sobre qué paquetes están instalados con

pip freeze > requirements.txt

Si marcó ese archivo en el control de versiones, cuando otra persona obtiene su código, puede configurar su propio entorno virtual e instalar todas las dependencias con:

pip install -r requirements.txt

Cada vez que puede automatizar tedio como este es increíble.

Matthew Schinckel
fuente
1
Esto parece ser parte de setuptools ahora también: pythonhosted.org/setuptools/…
Andriy Drozdyuk
debe usar pipreqspara obtener el archivo require.txt. Solo proporcionará las bibliotecas relacionadas con el proyecto donde está llamando pipreqs, por lo que require.txt se basará en el proyecto y no en virtualenv.
SeF
83

pip no instalará paquetes binarios y no está bien probado en Windows.

Como Windows no viene con un compilador por defecto, pip a menudo no se puede usar allí. easy_install puede instalar paquetes binarios para Windows.

fuzzyman
fuente
3
Interesante, nunca pensé en eso. pip tampoco es compatible con las funciones "extras" de setuptools que utilizan al menos la gente de Zope.
Sridhar Ratnakumar
1
¿Es eso una indicación de la necesidad de un entorno gcc en Windows, en lugar de insistir en que pip instale binarios preconstruidos?
WineSoaked
18
El compilador "correcto" para usar en Windows es Visual Studio (2008, creo que para versiones recientes de Python). Instalar esto, incluso la versión gratuita, es una molestia. La forma normal de instalar extensiones C en Windows es desde binarios precompilados. easy_install admite esto, pip no.
fuzzyman
8
Esta es la razón principal por la que sigo usando easy_install.
Randy Syring el
14
En los años transcurridos desde que se dio la respuesta anterior, ahora ya no es cierto que pip no puede instalar paquetes binarios, en Windows o en otras plataformas. El wheelformato de distribución binario lo hace posible. Muchos paquetes de terceros con módulos de extensión C ahora también se distribuyen como ruedas construidas para varias plataformas y pip puede instalarlos automáticamente. Ver, por ejemplo, pythonwheels.com
Ned Deily
76

ACTUALIZACIÓN: setuptoolsha absorbido distributeen lugar de al revés, como algunos pensaban. setuptoolsestá actualizado con los últimos distutilscambios y el formato de la rueda. Por lo tanto, easy_instally pipestán más o menos en pie de igualdad ahora.

Fuente: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name

usuario3341691
fuente
55
¿Por qué no está esto más votado? ¡Las respuestas están tan desactualizadas!
Andriy Drozdyuk
55
sí, las respuestas principales están extremadamente desactualizadas
WKordos
2
Por lo tanto, easy_install y pip están más o menos en pie de igualdad ahora. Esto no tiene sentido. easy_installtodavía es lo que ha sido durante mucho tiempo y pip lo mejora enormemente. easy_installes solo una parte setuptoolsy posiblemente una de las peores, razón por la cual pip pretende reemplazarlo.
Piotr Dobrogost
25

Como una adición a la respuesta de fuzzyman:

pip no instalará paquetes binarios y no está bien probado en Windows.

Como Windows no viene con un compilador por defecto, pip a menudo no se puede usar allí. easy_install puede instalar paquetes binarios para Windows.

Aquí hay un truco en Windows:

  • puede usar easy_install <package>para instalar paquetes binarios para evitar construir un binario

  • puedes usar pip uninstall <package>incluso si usaste easy_install.

Esto es solo una solución que me funciona en Windows. En realidad siempre uso pip si no hay binarios involucrados.

Vea el pip doku actual: http://www.pip-installer.org/en/latest/other-tools.html#pip-compared-to-easy-install

Preguntaré en la lista de correo qué está planeado para eso.

Aquí está la última actualización:

¡La nueva forma compatible de instalar binarios será wheel! Todavía no está en el estándar, pero casi. La versión actual sigue siendo alfa: 1.0.0a1

https://pypi.python.org/pypi/wheel

http://wheel.readthedocs.org/en/latest/

Probaré wheelcreando un instalador de OS X para PySideusar en wheellugar de huevos. Volveremos e informaremos sobre esto.

aclamaciones - Chris

Una actualización rápida:

La transición a wheelcasi ha terminado. La mayoría de los paquetes son compatibles wheel.

Prometí construir ruedas PySide, y lo hice el verano pasado. ¡Funciona genial!

PISTA: Unos desarrolladores fracasado hasta ahora para apoyar el formato de la rueda, simplemente porque se olvidan de sustituir distutilspor setuptools. A menudo, es fácil convertir dichos paquetes reemplazando esta sola palabra setup.py.

Christian Tismer
fuente
2
actualizado anteriormente - Creo que la espera casi ha terminado ;-)
Christian Tismer
Debería actualizar esto, una vez más, porque la rueda se ha convertido en el estándar en la primavera de 2014. En realidad, creo que esos viejos hilos no deberían cambiarse hasta el infinito, porque, las viejas respuestas eran bastante buenas, es fácil reemplazar todo cuando la realidad cambia. Pero, ¿es justo cuando desaparece el motivo original de una pregunta?
Christian Tismer
3

Acabo de encontrar un caso especial que tuve que usar en easy_installlugar de pip, o tengo que extraer los códigos fuente directamente.

Para el paquete GitPython, la versión en pipes demasiado antigua, que es 0.1.7, mientras que la de easy_installes la última que es 0.3.2.rc1.

Estoy usando Python 2.7.8. No estoy seguro sobre el mecanismo subyacente de easy_instally pip, pero al menos las versiones de algunos paquetes pueden ser diferentes entre sí, y a veces easy_installes la que tiene una versión más nueva.

easy_install GitPython
Landys
fuente
66
Verifiqué esto ahora (vea la marca de tiempo), y ya no es cierto: pip y easy_install funcionaron de la misma manera, lo que resultó en GitPython 0.3.5 hoy. (Probado solo en OS X Yosemite). ¿Cuál es tu plataforma? Actualice su entrada porque ahora es engañosa.
Christian Tismer