apt-get install vs pip install

103

Estoy un poco confundido acerca de los casos en que los comandos anteriores deben usarse al descargar paquetes de Python. Intenté descargar un paquete llamado pyudev de acuerdo con una respuesta a esta 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 apt-getsupone que debe usarse para instalar paquetes y cuándo se python-pipusa?

Vineet Kaushik
fuente
2
pipse usa solo para instalar paquetes de python, pero apt-getse usa para instalar todos los paquetes.
Avinash Raj
3
ok..por qué pip no pudo instalar python-pyudev?
Vineet Kaushik

Respuestas:

100

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

pipse usa para descargar e instalar paquetes directamente desde PyPI. PyPI es alojado por Python Software Foundation . Es un administrador de paquetes especializado que solo se ocupa de los paquetes de Python.

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

Algunas de las diferencias entre instalar paquetes de Python apt-gety pipson las siguientes:

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

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

  • apt-getinstala módulos de python en una ubicación de todo el sistema. No podemos simplemente instalar módulos en nuestro proyecto virtualenv . pipresuelve este problema para nosotros. Si estamos usando pipdespués de activar virtualenv, es lo suficientemente inteligente como para instalar solo los módulos en nuestro proyecto virtualenv. Como se mencionó en el punto anterior, si ya hay una versión de un paquete de Python en particular instalada en todo el sistema, y ​​uno de nuestros proyectos requiere una versión anterior del mismo paquete de 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 diferencias en los nombres de los paquetes. Canonical generalmente nombra los paquetes Python 2 como python-<package_name>y los paquetes Python 3 como python3-<package_name>. Mientras que, por piplo general, solo necesitamos usar <package_name>tanto para Python 2 como para los paquetes Python3.

Cual deberías utilizar:

Tanto apt-gety pipson los gestores de paquetes maduros que se instalan de forma automática cualquier otra dependencia de un paquete durante la instalación. Puedes usar a quien quieras. 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 pipte 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-geto no pip.

Aditya
fuente
55
Además, debe intentar usar uno u otro , y no ambos pipy al mismo tiempo apt-get.
earthmeLon
3
Tarde o temprano, uno puede necesitar un paquete o una versión del mismo que no sea proporcionado por apt-get. Debido a que el uso de ambos apt-gety pippuede provocar conflictos, debe ser el consejo de usar siempre pippara los paquetes soportados por pip?
Abhishek Anand
2
@Abhishek, mi método preferido es usar siempre Python a través de un virtualenv .. Entonces, sí, prefiero usar pip over apt ..
Aditya
Eso abre su propia lata de gusanos en ciertos escenarios. Digamos que ha instalado la mayor parte de sus paquetes con sudo pipy sin virtualenvporque la mayoría de sus proyectos necesitan el mismo entorno (pero más amplia que lo que está provisto con la instalación de Ubuntu limpio). Luego, cuando se realiza una actualización del sistema y Ubuntu decide actualizar Python a una nueva versión (como con zestya artful- Python 3.5 a 3.6), todos los paquetes instalados en pip- /usrse quedan atrás y pip.get_installed_distributions()produce una lista vacía.
z33k
Usar pip en contexto global es simplemente incorrecto y no debe usarse, ya que estropeará la instalación de Python del sistema. pip y apt-get cosas completamente diferentes, y está mal compararlas. Intente instalar un módulo python que dependa de otras bibliotecas que no sean python y se dará cuenta rápidamente de por qué podría necesitar apt-get.
mestia
21

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

Su principal problema es encontrar el nombre del paquete correcto 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 conclusión, el corresponsal de sudo apt-get install python-pyudeves 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: pipo apt-get. Consulte, por ejemplo, estas preguntas y respuestas sobre la diferencia en la instalación de un paquete usando pipy apt-get.

Radu Rădeanu
fuente
2

Mi forma preferida es usar siempre apty solo en caso de que el módulo aún no esté disponible en el repositorio de Debian / Ubuntu para usar pip, sino solo en el contexto del usuario: --userindicador. Al usar pipuno de todos modos, debe instalar todas las dependencias de compilación, digamos el repositorio de Ubuntu o proporcionarlas por sí mismas, lo que puede ser una tarea tediosa. apt-getinstale paquetes binarios mientras los pipconstruye después de la descarga. No se debe usar pip para instalar módulos en ubicaciones del sistema. Esto es simplemente incorrecto. Utilice siempre la --userbandera para instalar un módulo en la ubicación de inicio. PYTHONPATH configurado correctamente permite que Python recoja los módulos del INICIO primero y luego los módulos del sistema instalados con apt-get.

mestia
fuente