instalação apt-get vs instalação pip

103

Estou um pouco confuso sobre os casos em que os comandos acima devem ser usados ​​ao baixar pacotes python. Eu estava tentando baixar um pacote chamado pyudev de acordo com uma resposta a esta 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-getdeve ser usado para instalar pacotes e quando é python-pipusado?

Vineet Kaushik
fonte
2
pipé usado para instalar apenas pacotes python, mas apt-geté usado para instalar todo o pacote any.
precisa
3
ok .. então por que o pip não conseguiu instalar o python-pyudev?
Vineet Kaushik

Respostas:

100

PyPI é o índice do pacote Python - repositório de módulos python.

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

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

Algumas das diferenças entre a instalação de pacotes python apt-gete pipsão as seguintes:

  • A Canonical fornece apenas pacotes para módulos python selecionados. Enquanto o PyPI hospeda uma variedade muito mais ampla de módulos python. Portanto, existem 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 recentemente). Portanto, apt-getnão podemos decidir a versão do pacote python que queremos. pipnos ajuda nessa situação. Podemos instalar qualquer versão do pacote que foi anteriormente carregada no PyPI. Isso é extremamente útil em caso de conflito de dependências.

  • apt-getinstala módulos python em todo o sistema. Não podemos simplesmente instalar módulos em nosso projeto virtualenv . pipresolve esse problema para nós. Se estiver usando pipdepois de ativar o virtualenv, é inteligente o suficiente instalar apenas os módulos em nosso projeto virtualenv. Como mencionado no ponto anterior, se já houver uma versão de um pacote python específico instalado em todo o sistema, e um de nosso projeto exigir uma versão mais antiga do mesmo pacote python, em tais situações, podemos usar virtualenv e pip para instalar essa versão mais antiga do pacote python sem nenhum conflito.

  • Como o @Radu Rădeanu apontou nesta resposta , geralmente também haveria diferença nos nomes dos pacotes. A Canonical geralmente nomeia pacotes Python 2 como python-<package_name>e pacotes Python 3 como python3-<package_name>. Considerando pipque, geralmente, precisamos apenas usar <package_name>os pacotes Python 2 e Python3.

Qual deles você deve usar:

Ambos apt-gete pipsão gestores de pacotes maduros que instalam automaticamente qualquer outra dependência de pacotes durante a instalação. Você pode usar qualquer pessoa como quiser. No entanto, se você precisar instalar uma versão específica do python-package, ou instalar o pacote em um virtualenv, ou instalar um pacote hospedado apenas no PyPI; apenas pipajudaria a resolver esse problema. Caso contrário, se você não se importa em instalar os pacotes em todo o sistema, não importa se você usa apt-getou pip.

Aditya
fonte
5
Além disso, você deve tentar usar um ou outro , e não os dois pipe simultaneamente apt-get.
earthmeLon
3
Cedo ou tarde, pode ser necessário um pacote ou uma versão dele que não seja fornecida por apt-get. Como usar os dois apt-gete pippode causar conflitos, o conselho deve ser sempre usado pippara pacotes suportados por pip?
Abhishek Anand
2
@ Abhishek, meu método preferido é sempre usar o Python através de um virtualenv .. Então, sim, eu prefiro usar o pip do que o apt ..
Aditya
Isso abre sua própria lata de worms em certos cenários. Digamos que você instalou a maioria dos seus pacotes com o sudo pipsem virtualenvporque a maioria dos seus projetos precisava do mesmo ambiente (mas mais extenso do que o fornecido com a instalação limpa do Ubuntu). Então, quando você faz uma atualização do sistema e o Ubuntu decide atualizar o Python para uma nova versão (como zestyno artful- Python 3.5 para 3.6), todos os seus pacotes instalados pelo pip /usrsão deixados para trás e pip.get_installed_distributions()produz uma lista vazia.
Z33k
O uso de pip no contexto global está totalmente errado e não deve ser usado, porque atrapalha a instalação do sistema python. pip e apt-get têm coisas completamente diferentes, e é errado compará-las. Tente instalar um módulo python que depende de outras bibliotecas não python e você perceberá rapidamente por que pode precisar do apt-get.
mestia 11/01
21

Como o @AvinashRaj disse em seu comentário , pipé usado para instalar apenas 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

lhe dará o nome certo para o pacote que você deseja instalar usando pip install, como

apt-cache search pyudev

fornecerá o nome certo para o pacote que você deseja 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

Então, em conlusã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: pipou apt-get. Veja, por exemplo, estas perguntas e respostas sobre a diferença na instalação de um pacote usando pipe apt-get.

Radu Rădeanu
fonte
2

Minha maneira preferida é sempre usar apte somente no caso de o módulo ainda não estar disponível no repositório Debian / Ubuntu para uso pip, mas apenas no contexto do usuário - --usersinalizador. Ao usar pipum de qualquer maneira, é necessário obter todas as dependências de compilação instaladas, digamos, o repositório do Ubuntu ou fornecê-las, o que pode ser uma tarefa tediosa. apt-getinstale pacotes binários enquanto os pipconstrói após o download. Não se deve usar pip para instalar módulos nos locais do sistema. Isso está completamente errado. Sempre use o --usersinalizador para instalar um módulo no local inicial. O PYTHONPATH configurado corretamente permite que o python pegue os módulos primeiro no HOME e depois nos módulos do sistema instalados apt-get.

mestia
fonte