Qual é a diferença entre o apt-get install e o apt-get build-dep?

33

Na página do apt-get man , pode-se encontrar o seguinte:

install pkg (s)
Esta opção é seguida por um ou mais pacotes desejados para instalação. Cada pacote é um nome de pacote, não um nome de arquivo completo (por exemplo, em um sistema Fedora Core, glibc seria o argumento fornecido, não glibc-2.4.8.i686.rpm).
Todos os pacotes exigidos pelos pacotes especificados para instalação também serão recuperados e instalados .
[...]

build-dep source_pkg
Faz com que o apt-get instale / remova pacotes na tentativa de satisfazer as dependências de compilação de um pacote de origem.

Parece que os dois estão tentando satisfazer dependências, mas obtive resultados diferentes ao instalarmatplotlib com cada um deles: apt-get intallnão funcionou com o subseqüente pip install matplotlibno meu virtualenv, enquanto o apt-get build-depfez *.

*Sim, eu precisava instalar matplotlibem um venv, mas o pip não conseguia resolver algumas das dependências, então usei o preguiçosamente o apt para resolvê-lo

Anto
fonte

Respostas:

39

A versão curta.

apt-get install

instala um novo pacote, resolvendo e baixando automaticamente pacotes dependentes. Se o pacote estiver instalado, tente atualizar para a versão mais recente.

apt-get build-dep

Faz com que o apt-get instale / remova pacotes na tentativa de satisfazer as dependências de compilação de um pacote de origem.

O comando sudo apt-get build-dep packagenamesignifica instalar todas as dependências do 'packagename' para que eu possa construí-lo ". Portanto, o build-dep é um comando do apt-get, como instalar, remover, atualizar etc.

O build-depcomando procura nos repositórios locais no sistema e instala as dependências de compilação para o pacote. Se o pacote não existir no repositório local, ele retornará um código de erro.

Para instalar o matplotlib, consulte Para instalar o matplotlib no Ubuntu.

Fonte: ManPage e Ravi Saive

Mitch
fonte
19

A diferença é se as dependências são necessárias no tempo de execução e não no tempo de construção .

Por exemplo, talvez eu esteja construindo um binário que usa o openssl. Na construção tempo eu precisaria os arquivos de cabeçalho do OpenSSL, que estão em libssl-dev. Eu listaria isso como a Build-Depends.

No entanto, o binário e o pacote resultantes não precisam do cabeçalho e outros arquivos de desenvolvimento; portanto, no momento da instalação , não preciso libssl-dev. Não seria Depends, então. Mas libssl, a biblioteca de tempo de execução contra a qual meu binário estava vinculado precisaria estar Depends.

As seções do homem que você citou indicam isso (ele fala sobre "satisfazer as dependências de compilação " de um pacote), mas sem o conhecimento prévio de quando as dependências de compilação são usadas, isso pode ser confuso.

Dê uma olhada no guia de políticas da Debian para obter definições dos campos do arquivo de controle:

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

aqui está a seção sobre Build-Depends. Observe que está no cabeçalho "dependências para pacotes de origem ":

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

E este fala sobre Depends. Observe seu 'sob o cabeçalho de pacotes binários :

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

roadmr
fonte
Obrigado. Parece que eu precisaria de build-dep para construir uma biblioteca a partir da fonte .. de acordo com o seu descritivo.
kchoi