¿Cuál es la diferencia entre apt-get install y apt-get build-dep?

33

En la página de apt-get man , se puede encontrar esto:

instalar paquete (s)
Esta opción es seguida por uno o más paquetes deseados para la instalación. Cada paquete es un nombre de paquete, no un nombre de archivo completo (por ejemplo, en un sistema Fedora Core, glibc sería el argumento proporcionado, no glibc-2.4.8.i686.rpm).
Todos los paquetes requeridos por los paquetes especificados para la instalación también se recuperarán e instalarán .
[...]

build-dep source_pkg
Hace que apt-get instale / elimine paquetes en un intento de satisfacer las dependencias de compilación para un paquete fuente.

Parece que ambos están tratando de satisfacer las dependencias, pero obtuve resultados diferentes al instalarmatplotlib con cada uno de ellos: apt-get intallno funcionó con mi posterior pip install matplotliben mi virtualenv, mientras que apt-get build-depsí *.

*Sí, necesitaba instalarlo matplotliben un venv, pero pip no pudo resolver algunas de las dependencias, así que perezosamente usé apt para resolverlo

Anto
fuente

Respuestas:

39

La versión corta

apt-get install

instala un nuevo paquete, resolviendo y descargando automáticamente paquetes dependientes. Si el paquete está instalado, intente actualizar a la última versión.

apt-get build-dep

Hace que apt-get instale / elimine paquetes en un intento de satisfacer las dependencias de compilación para un paquete fuente.

El comando sudo apt-get build-dep packagenamesignifica instalar todas las dependencias para 'packagename' para que pueda compilarlo ". Así que build-dep es un comando apt-get como instalar, eliminar, actualizar, etc.

El build-depcomando busca en los repositorios locales del sistema e instala las dependencias de compilación para el paquete. Si el paquete no existe en el repositorio local, devolverá un código de error.

Para instalar matplotlib, consulte Para instalar matplotlib en Ubuntu

Fuente: ManPage y Ravi Saive

Mitch
fuente
19

La diferencia es si las dependencias son necesarias en tiempo de ejecución en lugar de en tiempo de compilación .

Por ejemplo, tal vez estoy construyendo un binario que usa openssl. En el momento de la compilación , necesitaría los archivos de encabezado openssl, que están en libssl-dev. Entonces enumeraría esto como un Build-Depends.

Sin embargo, el binario y el paquete resultantes no necesitan el encabezado y otros archivos de desarrollo, por lo que en el momento de la instalación no los necesito libssl-dev. No estaría adentro Depends, entonces. Pero libssl, la biblioteca de tiempo de ejecución contra la que se vincula mi binario, debería estar Depends.

Las secciones de manual que citó indican esto (se trata de "satisfacer las dependencias de compilación " de un paquete), pero sin conocimiento previo de cuándo se utilizan Build-Depends, esto puede ser confuso.

Consulte la guía de políticas de Debian para obtener definiciones de los campos del archivo de control:

http://www.debian.org/doc/debian-policy/ch-controlfields.html

Aquí está la sección sobre Build-Depends. Tenga en cuenta que está debajo del encabezado "dependencias para paquetes fuente ":

http://www.debian.org/doc/debian-policy/ch-relationships.html#s-sourcebinarydeps

Y este habla de Depends. Tenga en cuenta que está debajo del encabezado de paquetes binarios :

http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

roadmr
fuente
Gracias. Parece que necesitaría build-dep para construir una biblioteca desde la fuente ... de acuerdo con su descripción.
kchoi