apt-get install vs instalação pip

78

Estou um pouco confuso sobre os casos em que os comandos acima devem ser usados durante o download de pacotes python. Eu estava tentando baixar um pacote chamado pyudev de acordo com uma resposta com este pergunta . Eu executei este comando:

sudo pip install python-pyudev

mas recebeu a seguinte mensagem:

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

No entanto, o seguinte funcionou bem:

sudo apt-get install python-pyudev

Quando apt-get deve ser usado para instalar pacotes e quando python-pip é usado?

    
por Vineet Kaushik 09.03.2014 / 16:51

3 respostas

78

PyPI é o repositório de índices do Python Package of python modules.

pip é usado para baixar e instalar pacotes diretamente do PyPI. O PyPI é hospedado por Python Software Foundation . É um gerenciador de pacotes especializado que lida apenas com pacotes python.

apt-get é usado para baixar e instalar pacotes de repositórios do Ubuntu hospedados pela Canonical.

Algumas das diferenças entre a instalação de pacotes python de apt-get e pip são as seguintes:

  • A Canonical fornece apenas pacotes para módulos python selecionados. Considerando que, PyPI hospeda uma gama muito mais ampla de módulos python. Portanto, há muitos módulos python que você não poderá instalar usando apt-get .

  • A Canonical hospeda apenas uma única versão de qualquer pacote (geralmente o mais recente ou o lançado no passado recente). Portanto, com apt-get , não podemos decidir a versão do pacote python que queremos. pip nos ajuda nessa situação. Podemos instalar qualquer versão do pacote que tenha sido previamente carregado no PyPI. Isso é extremamente útil em caso de conflito nas dependências.

  • apt-get instala módulos python em todo o sistema. Não podemos simplesmente instalar módulos em nosso projeto virtualenv . pip resolve esse problema para nós. Se estivermos usando pip após ativar o virtualenv, é inteligente o suficiente apenas instalar os módulos em nosso projeto virtualenv. Como mencionado no ponto anterior, se houver uma versão de um determinado pacote python já instalada em todo o sistema e um de nosso projeto precisar de uma versão mais antiga do mesmo pacote python, em tais situações, podemos usar virtualenv e pip para instalar aquela versão mais antiga do pacote python sem conflitos.

  • Como @Radu Rădeanu apontou nessa resposta , geralmente haveria diferença nos nomes dos pacotes também. A Canonical geralmente nomeia pacotes do Python 2 como python-<package_name> e pacotes do Python 3 como python3-<package_name> . Considerando que, para pip , geralmente só precisamos usar <package_name> para os pacotes Python 2 e Python3.

Qual deles você deve usar:

Tanto apt-get como pip são gerenciadores de pacotes maduros que instalam automaticamente qualquer outra dependência de pacote durante a instalação. Você pode usar qualquer um como quiser. No entanto, se você precisar instalar uma versão específica do pacote python, ou instalar o pacote em um virtualenv, ou instalar um pacote que esteja hospedado apenas no PyPI; somente pip ajudaria você a resolver esse problema. Caso contrário, se você não se importar de instalar os pacotes na localização do sistema, não importa se você usa apt-get ou pip .

    
por Aditya 09.03.2014 / 17:53
19

Como @AvinashRaj disse em seu comentário , pip é usado para instalar somente pacotes python, mas apt-get é usado para instalar pacotes criados em qualquer linguagem de programação.

Seu principal problema é encontrar o nome do pacote correto nos dois casos:

pip search pyudev

fornecerá o nome correto para o pacote que você deseja instalar usando pip install , como

apt-cache search pyudev

fornecerá o nome correto para o pacote que você deseja instalar usando apt-get install :

[email protected]: ~ $ pip search pyudev
pyudev                    - A libudev binding
[email protected]: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

Então, em conclusão, o correspondente de sudo apt-get install python-pyudev é sudo pip install pyudev , não sudo pip install python-pyudev .

Agora depende de você o que você deseja escolher quando deseja instalar um pacote python: pip ou apt-get . Veja, por exemplo, estas perguntas e respostas sobre diferença na instalação de um pacote usando pip e apt-get .

    
por Radu Rădeanu 09.03.2014 / 17:13
0

Minha maneira preferida é sempre usar apt e somente no caso de o módulo ainda não estar disponível no repositório Debian / Ubuntu para usar pip , mas somente no contexto do usuário - --user flag. Ao usar pip one, de qualquer forma, é necessário obter todas as dependências de compilação instaladas, digamos, do repositório do Ubuntu ou fornecê-las por conta própria, o que pode ser uma tarefa tediosa. apt-get instala pacotes binários enquanto pip os cria após o download. Não se deve usar pip para instalar módulos nos locais do sistema. Isso está totalmente errado. Sempre use --user flag para instalar um módulo no local de origem. O PYTHONPATH configurado corretamente permitiu que o Python escolhesse primeiro os módulos do HOME e, em seguida, os módulos do sistema instalados com apt-get .

    
por mestia 08.05.2018 / 15:22