apt-get install vs pip install

81

Estoy un poco confundido acerca de los casos en los que los comandos anteriores deben usarse al descargar paquetes de Python. Estaba intentando descargar un paquete llamado pyudev de acuerdo con una respuesta con este pregunta . Ejecuté este comando:

sudo pip install python-pyudev

pero recibió el siguiente mensaje:

Downloading/unpacking python-pyudev

  Could not find any downloads that satisfy the requirement python-pyudev
Cleaning up...
No distributions at all found for python-pyudev
Storing complete log in /home/vineet/.pip/pip.log

Sin embargo, lo siguiente funcionó bien:

sudo apt-get install python-pyudev

¿Cuándo se supone que apt-get se usará para instalar paquetes y cuándo se usa python-pip ?

    
pregunta Vineet Kaushik 09.03.2014 - 16:51

3 respuestas

79

PyPI es el índice del paquete de Python - repositorio de módulos de python.

pip se usa para descargar e instalar paquetes directamente desde PyPI. PyPI está alojado por Python Software Foundation . Es un administrador de paquetes especializado que solo trata con paquetes de Python.

apt-get se usa para descargar e instalar paquetes de repositorios de Ubuntu alojados por Canonical.

Algunas de las diferencias entre instalar paquetes de python de apt-get y pip son las siguientes:

  • Canonical solo proporciona paquetes para los módulos de python seleccionados. Mientras que, PyPI alberga una gama mucho más amplia de módulos de python. Entonces, hay muchos módulos de python que no podrás instalar usando apt-get .

  • Canonical solo aloja una única versión de cualquier paquete (generalmente la última o la que se lanzó en el pasado reciente). Entonces, con apt-get no podemos decidir la versión del paquete python que queremos. pip nos ayuda en esta situación. Podemos instalar cualquier versión del paquete que haya sido cargado previamente en PyPI. Esto es extremadamente útil en caso de conflicto en las dependencias.

  • apt-get instala los módulos de python en la ubicación de todo el sistema. No podemos simplemente instalar módulos en nuestro proyecto virtualenv . pip resuelve este problema para nosotros. Si estamos utilizando pip después de activar el virtualenv, es lo suficientemente inteligente como para instalar solo los módulos en nuestro proyecto virtualenv. Como se mencionó en el punto anterior, si hay una versión de un paquete python particular ya instalado en la ubicación de todo el sistema, y ​​uno de nuestros proyectos requiere una versión anterior del mismo paquete python, en tales situaciones podemos usar virtualenv y pip para instalar esa versión anterior del paquete python sin ningún conflicto.

  • Como @Radu Rădeanu señaló en esta respuesta , generalmente también habría una diferencia en los nombres de los paquetes. Canonical generalmente nombra paquetes de Python 2 como python-<package_name> y paquetes de Python 3 como python3-<package_name> . Mientras que para pip generalmente solo necesitamos usar <package_name> tanto para Python 2 como para los paquetes de Python3.

¿Cuál debería usar?

Tanto apt-get como pip son gestores de paquetes maduros que instalan automáticamente cualquier otra dependencia del paquete durante la instalación. Puede usar a cualquier persona que desee. Sin embargo, si necesita instalar una versión particular de python-package, o instalar el paquete en un virtualenv, o instalar un paquete que solo está alojado en PyPI; solo pip te ayudaría a resolver ese problema. De lo contrario, si no le importa instalar los paquetes en una ubicación de todo el sistema, realmente no importa si usa apt-get o pip .

    
respondido por el Aditya 09.03.2014 - 17:53
20

Como @AvinashRaj dijo en su comentario , pip se usa para instalar solo paquetes de Python, pero apt-get se usa para instalar paquetes creados en cualquier lenguaje de programación.

Su principal problema es encontrar el nombre correcto del paquete en ambos casos:

pip search pyudev

le dará el nombre correcto para el paquete que desea instalar usando pip install , como

apt-cache search pyudev

le dará el nombre correcto para el paquete que desea instalar usando apt-get install :

radu@Radu: ~ $ pip search pyudev
pyudev                    - A libudev binding
radu@Radu: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

Entonces, en conlusion, el corresponsal de sudo apt-get install python-pyudev es sudo pip install pyudev , no sudo pip install python-pyudev .

Ahora depende de usted lo que desea elegir cuando desea instalar un paquete de Python: pip o apt-get . Ver, por ejemplo, esta Q & amp; A acerca de diferencia en la instalación de un paquete usando pip y apt-get .

    
respondido por el Radu Rădeanu 09.03.2014 - 17:13
1

Mi forma preferida es usar siempre apt y solo en caso de que el módulo aún no esté disponible en el repositorio Debian / Ubuntu para usar pip , pero solo en el contexto del usuario - --user flag. Al usar pip one, de todos modos, tenemos que obtener todas las dependencias de compilación instaladas, digamos el repositorio de Ubuntu, o proporcionarlas, lo que puede ser una tarea tediosa. apt-get instala paquetes binarios, mientras que pip los genera después de la descarga. No se debe usar pip para instalar módulos en las ubicaciones del sistema. Esto es completamente incorrecto. Utilice siempre el indicador --user para instalar un módulo en la ubicación de inicio. PYTHONPATH correctamente configurado permita que python recoja los módulos de HOME primero y luego los módulos de sistema instalados con apt-get .

    
respondido por el mestia 08.05.2018 - 15:22

Lea otras preguntas en las etiquetas