¿Python tiene un sistema de gestión de paquetes / módulos?

145

¿Python tiene un sistema de administración de paquetes / módulos, similar a cómo Ruby tiene rubygems donde puedes hacer gem install packagename?

Al instalar los módulos de Python , solo veo referencias python setup.py install, pero eso requiere que primero encuentre el paquete.

Tommy Chheng
fuente
3
Si cree que el índice de paquetes Python PyPI debería tener instrucciones más claras sobre cómo instalar paquetes, vote y comente el problema en bitbucket.org/pypa/pypi/issue/149/…
Coronel Panic
Si bien estaba vigente en ese momento, el enlace en esta pregunta ahora es a la documentación heredada de distutils. Archivé bugs.python.org/issue26014 para cubrir que estos documentos deben ser más claros y que ya no son adecuados para su uso como documentación del usuario final (solo se guardan para el beneficio de los implementadores de herramientas).
ncoghlan

Respuestas:

213

Progreso reciente

Marzo de 2014 : ¡buenas noticias! Python 3.4 se envía con Pip. Pip ha sido durante mucho tiempo el administrador de paquetes estándar de facto de Python. Puede instalar un paquete como este:

pip install httpie

Wahey! Esta es la mejor característica de cualquier versión de Python. Hace que la riqueza de las bibliotecas de la comunidad sea accesible para todos. Los novatos ya no están excluidos del uso de bibliotecas comunitarias por la dificultad prohibitiva de la configuración.

Sin embargo , sigue habiendo una serie de frustraciones sobresalientes con la experiencia de empaquetado de Python. Acumulativamente, hacen que Python sea muy poco acogedor para los novatos. Además, la larga historia de negligencia (es decir, no enviar con un administrador de paquetes durante 14 años desde Python 2.0 a Python 3.3) causó daños a la comunidad. Describo ambos a continuación.

Frustraciones sobresalientes

Es importante comprender que, si bien los usuarios experimentados pueden evitar estas frustraciones, son barreras importantes para las personas nuevas en Python. De hecho, la dificultad y la hostilidad del usuario en general es probable que disuada a muchos de ellos.

El sitio web de PyPI es contra-útil

Cada idioma con un administrador de paquetes tiene un repositorio oficial (o cuasi oficial) para que la comunidad descargue y publique paquetes. Python tiene el índice del paquete Python, PyPI. https://pypi.python.org/pypi

Comparemos sus páginas con las de RubyGems y Npm (el administrador de paquetes Node).

  1. https://rubygems.org/gems/rails Página RubyGems para el paqueterails
  2. https://www.npmjs.org/package/express página Npm para el paqueteexpress
  3. https://pypi.python.org/pypi/simplejson/ Página de PyPI para el paquetesimplejson

Verá que las páginas RubyGems y Npm comienzan con una descripción de una línea del paquete, y luego grandes instrucciones amigables sobre cómo instalarlo.

Mientras tanto, ¡ay de cualquier desafortunado usuario de Python que ingenuamente busque PyPI! En https://pypi.python.org/pypi/simplejson/ , no encontrarán instrucciones tan útiles. Sin embargo, hay un gran enlace verde 'Descargar'. No es irrazonable seguirlo. ¡Ajá, hacen clic! Su navegador descarga un .tar.gzarchivo. Muchos usuarios de Windows ni siquiera pueden abrirlo, pero si perseveran, eventualmente pueden extraerlo, luego ejecutarlo setup.pyy eventualmente con la ayuda de Google setup.py install. Algunos se rendirán y reinventarán la rueda.

Por supuesto, todo esto está mal. La forma más fácil de instalar un paquete es con un comando Pip. Pero PyPI ni siquiera mencionó a Pip. En cambio, los condujo por un camino arcaico y tedioso.

Error: no se puede encontrar vcvarsall.bat

Numpy es una de las bibliotecas más populares de Python. Intenta instalarlo con Pip, obtienes este mensaje de error críptico:

Error: no se puede encontrar vcvarsall.bat

Intentar solucionar esa es una de las preguntas más populares sobre Stack Overflow: " error: no se puede encontrar vcvarsall.bat "

Pocas personas tienen éxito.

A modo de comparación, en la misma situación, Ruby imprime este mensaje, que explica lo que está sucediendo y cómo solucionarlo:

Actualice su RUTA para incluir herramientas de compilación o descargue DevKit desde http://rubyinstaller.org/downloads y siga las instrucciones en http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Publicar paquetes es difícil

Ruby y Nodejs se entregan con gerentes de paquetes con todas las funciones, Gem (desde 2007) y Npm (desde 2011), y han nutrido comunidades de intercambio centradas en GitHub. Npm hace que publicar paquetes sea tan fácil como instalarlos, ya tiene 64k paquetes . RubyGems enumera 72k paquetes . El venerable índice del paquete de Python solo muestra 41k .

Historia

Volando frente a su lema " baterías incluidas ", Python envió sin un administrador de paquetes hasta 2014.

Hasta Pip, el estándar de facto era un comando easy_install. Era lamentablemente inadecuado. El no era un comando para desinstalar paquetes.

Pip fue una mejora masiva. Tenía la mayoría de las características de Ruby's Gem. Desafortunadamente, Pip era, hasta hace poco, irónicamente difícil de instalar. De hecho, el problema sigue siendo una de las principales preguntas de Python sobre Stack Overflow: " ¿Cómo instalo pip en Windows? "

Coronel Panic
fuente
3
Para cualquier persona interesada, el PEP 439 propone una forma de simplificar el proceso de instalación de pip, aunque creo que este PEP es solo parte de una estrategia más amplia que se está analizando. Vea también la discusión aquí .
Cartroo
3
@Cartroo son buenas noticias! Python merece un administrador de paquetes, espero que los desarrolladores puedan hacerlo realidad.
Coronel Panic
Absolutamente, hace mucho tiempo. Definitivamente espero que llegue a Python 3.4, al menos. Desafortunadamente, dudo mucho que termine siendo transferido a 2.x, pero al menos hay luz al final del túnel. Esperemos que no sea un dragón que se aproxima ... (^_^)
Cartroo
66
En defensa de Python, lenguajes más nuevos como Ruby y Node tuvieron la suerte de poder observar los errores de los idiomas anteriores y evitarlos. Dicho esto, realmente deseo que la administración de paquetes en Python reciba más amor y cuidado, así que me alegra ver PEP 439 como lo señaló @Cartroo.
Dennis
Estoy de acuerdo en que la administración de paquetes de Ruby es algo maravilloso desde mi perspectiva (usuario final). gem install XParece que funciona en todas las plataformas. Entonces, ¿cómo manejaron esto para gemas que requieren compilación de código C en Windows?
bsa
64

El índice de paquete de Python (PyPI) parece ser estándar:

  • Para instalar un paquete: pip install MyProject
  • Para actualizar un paquete pip install --upgrade MyProject
  • Para arreglar una versión de un paquetepip install MyProject==1.0

Puede instalar el administrador de paquetes de la siguiente manera:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

Referencias

Thomas Bratt
fuente
3
Esta es la respuesta moderna.
Gringo Suave
66
Busqué en Internet durante 20 minutos y esta respuesta no apareció en ninguna parte. Muchas gracias. Además, tengo serias dudas sobre el uso de python si la documentación es tan mala ... esto debería estar en la página principal de Python o accesible desde google o algo así
Chris J
63

Y solo para proporcionar un contraste, también hay pip .

Ignacio Vazquez-Abrams
fuente
2
¡Gracias! ¿Por qué no se menciona pip en la página de documentación de instalación de módulos de Python?
Tommy Chheng
Tenga en cuenta que pip no admite huevos, solo instala paquetes fuente. En términos generales, pip hace muchas cosas mucho mejor que easy_install, pero es probable que easy_install se instale de manera predeterminada en la mayoría de los Unixes, pip no.
Jeffrey Harris
8
@ Tommy derecho! Si los desarrolladores de Python se preocuparan por la experiencia del usuario, enviarían Python con un administrador de paquetes (como pip). Ruby se envía con Gem, y Nodejs con Npm. stackoverflow.com/a/13445719/284795
Coronel Panic
21

Como desarrollador de Ruby y Perl y aprendiz de Python, no he encontrado que easy_install o pip sean equivalentes a RubyGems o CPAN.

Tiendo a mantener mis sistemas de desarrollo ejecutando las últimas versiones de los módulos a medida que los desarrolladores los actualizan, y congelar mis sistemas de producción en las versiones establecidas. Tanto RubyGems como CPAN facilitan la búsqueda de módulos al enumerar lo que está disponible, luego instalarlo y luego actualizarlo individualmente o en masa si lo desea.

easy_install y pip facilitan la instalación de un módulo. Puedo nombrar explícitamente el módulo que se actualizará, pero las aplicaciones no me dirán qué se ha actualizado ni actualizarán todo a granel si lo deseo.

Entonces, la funcionalidad básica está en pip y easy_install, pero faltan características que me gustaría ver que las haría más amigables y fáciles de usar y a la par con CPAN y RubyGems.

el hombre de hojalata
fuente
Esta respuesta ahora está muy desactualizada.
ncoghlan
11

Al menos a fines de 2014, se debe considerar la distribución Anaconda Python de Continuum Analytics con el administrador de paquetes de conda . Resuelve la mayoría de los problemas serios que las personas enfrentan con Python en general (administración de diferentes versiones de Python, actualización de versiones de Python, administración de paquetes, entornos virtuales, compatibilidad con Windows / Mac) en una descarga cohesiva.

Le permite hacer casi todo lo que desee con Python sin tener que cambiar el sistema. Mi próxima solución preferida es pip + virtualenv, pero debe instalar virtualenv en su sistema Python (y su sistema Python puede no ser la versión que desea), o construir desde la fuente . Anaconda hace que todo este proceso sea el clic de un botón, además de agregar muchas otras funciones.

Anderspitman
fuente
7

Eso sería fácil_instalar .

Kirk Strauser
fuente
1
Si desea denunciar a todos los que dijeron en la página easy_install, consulte primero las fechas. Ese fue un consejo válido cuando se dio hace casi 7 años . No pienso en nosotros, los que respondemos vamos a revisar esto regularmente para actualizar, por lo que la votación negativa es una tontería.
Kirk Strauser
5

No veo ni MacPorts ni Homebrew mencionados en otras respuestas aquí, pero dado que los veo mencionados en otra parte de Stack Overflow para preguntas relacionadas, agregaré mis propios US $ 0.02 que mucha gente parece considerar MacPorts como no solo un paquete administrador de paquetes en general (a partir de hoy enumeran 16311 paquetes / puertos, 2931 coinciden con "python", aunque solo para Macs), pero también como un administrador de paquetes decente (quizás mejor) para paquetes / módulos Python:

Pregunta

"... ¿Cuál es el método que utilizan los desarrolladores de Mac Python para administrar sus módulos?"

Respuestas

Ciencia

"Las Mac (a diferencia de Linux) no vienen con un administrador de paquetes, pero hay un par de administradores de paquetes populares que puedes instalar. Macports ..."

Todavía estoy debatiendo si debo usar MacPorts o no, pero en este momento me estoy inclinando en esa dirección.

Osteoboon
fuente
1
Homebrew en sí dice: Puede instalar paquetes de Python con (la instalación fácil obsoleta o) pip install <your_favorite_package>
Simone
4

En Windows instale http://chocolatey.org/ luego

choco install python

Abra una nueva ventana de cmd con la RUTA actualizada. A continuación, hacer

choco install pip

Después de eso puedes

pip install pyside
pip install ipython
...
hansvb
fuente
Quería responder a esto como un comentario a la respuesta de Thomas Bratt, pero no tengo suficiente reputación ...
hansvb
3

Dado que nadie ha mencionado pipenv aquí, me gustaría describir mis puntos de vista por qué todos deberían usarlo para administrar paquetes de python.

Como @ColonelPanic mencionó, hay varios problemas con Python Package Index y también con pip y virtualenv .

Pipenv resuelve la mayoría de los problemas con pip y también proporciona características adicionales.

Características de Pipenv

Pipenv está destinado a reemplazar pip y virtualenv, lo que significa que pipenv creará automáticamente un entorno virtual separado para cada proyecto, evitando conflictos entre diferentes versiones de python / versiones de paquete para diferentes proyectos.

  • Permite compilaciones verdaderamente deterministas, al tiempo que especifica fácilmente solo lo que desea.
  • Genera y comprueba hashes de archivos para dependencias bloqueadas.
  • Instale automáticamente las pitones requeridas, si pyenv está disponible.
  • Encuentra automáticamente tu proyecto en casa, de forma recursiva, buscando un Pipfile.
  • Genera automáticamente un Pipfile, si no existe.
  • Crea automáticamente un virtualenv en una ubicación estándar.
  • Agrega / elimina automáticamente paquetes a un Pipfile cuando se desinstalan / instalan.
  • Carga automáticamente archivos .env, si existen.

Si ha trabajado en proyectos de Python anteriormente, se dará cuenta de que estas características hacen que la administración de paquetes sea mucho más fácil.

Otros comandos

  • checkcomprueba las vulnerabilidades de seguridad y afirma que el entorno actual cumple los requisitos de PEP 508. ( que creo que es una gran característica, especialmente después de esto: paquetes maliciosos en PyPi )
  • graph le mostrará un gráfico de dependencia, de sus dependencias instaladas.

Puedes leer más sobre esto aquí - Pipenv .

Instalación

Puede encontrar la documentación de instalación aquí.

PD: Si le gustó trabajar con las solicitudes del paquete Python , le agradaría saber que pipenv es del mismo desarrollador Kenneth Reitz

Vaulstein
fuente
0

Poesía es lo que estás buscando. Se encarga de la gestión de dependencias, entornos virtuales, ejecución.

0x32e0edfb
fuente