Diferença entre 'python setup.py install' e 'pip install'


105

Eu tenho um pacote externo que quero instalar em meu python virtualenv de um arquivo tar. Qual é a melhor maneira de instalar o pacote?

Eu descobri 2 maneiras de fazer isso:

  1. Extraia o arquivo tar e execute python setup.py installdentro do diretório extraído.
  2. pip install packagename.tar.gzdo exemplo nº 7 em https://pip.pypa.io/en/stable/reference/pip_install/#examples

É se há alguma diferença em fazê-los dessas 2 maneiras.


5
Use pip. Você pode desinstalar pacotes com ele.
Blender

"Da fonte" como em "checkout VCS", ou como em sdist?

O que é "melhor" depende dos seus requisitos! Você tentou qualquer uma dessas soluções e falhou nelas de alguma forma? Ou você está perguntando o que a diferença é entre estas abordagens?
Martin Atkins

No fedora, por exemplo, usando yum.
perreal

Respostas:


109

Superficialmente, ambos fazem a mesma coisa: fazer python setup.py installou pip install <PACKAGE-NAME>instalarão seu pacote python para você, com um mínimo de confusão.

No entanto, o uso do pip oferece algumas vantagens adicionais que o tornam muito mais agradável de usar.

  • pip irá baixar automaticamente todas as dependências de um pacote para você. Por outro lado, se você usar setup.py, muitas vezes terá que pesquisar manualmente e fazer download das dependências, o que é tedioso e pode se tornar frustrante.
  • pip mantém o controle de vários metadados que permitem desinstalar e atualizar facilmente pacotes com um único comando: pip uninstall <PACKAGE-NAME>e pip install --upgrade <PACKAGE-NAME>. Em contraste, se você instalar um pacote usando setup.py, terá que excluir manualmente e manter um pacote manualmente se quiser se livrar dele, o que pode ser potencialmente sujeito a erros.
  • Você não precisa mais baixar manualmente seus arquivos. Se você usar setup.py, terá que visitar o site da biblioteca, descobrir onde fazer o download, extrair o arquivo, executar setup.py... Em contraste, o pip irá pesquisar automaticamente o índice de pacotes Python (PyPi) para ver se o pacote existe lá, e irá baixar, extrair e instalar automaticamente o pacote para você. Com algumas exceções, quase todas as bibliotecas Python genuinamente úteis podem ser encontradas no PyPi.
  • pip permitirá que você instale facilmente as rodas, que é o novo padrão de distribuição Python. Mais informações sobre rodas .
  • pip oferece benefícios adicionais que se integram bem com o using virtualenv, que é um programa que permite executar vários projetos que requerem bibliotecas conflitantes e versões de Python em seu computador. Mais informações .
  • pip é empacotado por padrão com Python a partir do Python 2.7.9 na série Python 2.x, e a partir do Python 3.4.0 na série Python 3.x, tornando-o ainda mais fácil de usar.

Então, basicamente, use pip. Ele apenas oferece melhorias em relação ao uso python setup.py install.


Se você estiver usando uma versão mais antiga do Python, não puder fazer upgrade e não tiver o pip instalado, poderá encontrar mais informações sobre a instalação do pip nos seguintes links:

pip, por si só, realmente não requer um tutorial. 90% do tempo, o único comando que você realmente precisa é pip install <PACKAGE-NAME>. Dito isso, se você estiver interessado em aprender mais sobre os detalhes do que exatamente você pode fazer com o pip, consulte:

Também é comumente recomendado que você use pip e virtualenv juntos. Se você é um iniciante em Python, pessoalmente acho que seria bom começar apenas usando pip e instalar pacotes globalmente, mas, eventualmente, acho que você deve fazer a transição para o virtualenv ao lidar com projetos mais sérios.

Se quiser saber mais sobre como usar pip e virtualenv juntos, consulte:


1
O pip install internamente chama o arquivo setup.py?
variável de

@variable, pip install from "wheels", pacotes pré-compilados, não, pip install from source sim: veja pip install interface de sistema de compilação
denis

Na minha experiência python setup.py installtambém baixa e instala dependências. Isso é uma mudança desde que você escreveu esta resposta em 2013?
Ken Williams

19

python setup.py installé o análogo do make install: é uma maneira limitada de compilar e copiar arquivos para diretórios de destino. Isso não significa que seja a melhor maneira de realmente instalar software em seu sistema.

pipé um gerenciador de pacotes, que pode instalar, atualizar, listar e desinstalar pacotes, como gerenciadores de pacotes familiares, incluindo: dpkg, apt, yum, urpmi, portsetc. Nos bastidores, ele será executado python setup.py install, mas com opções específicas para controlar como e onde as coisas acabam sendo instaladas.

Em resumo: use pip.


2

A questão é sobre o método preferido para instalar um tarball local contendo um pacote python, NÃO sobre a vantagem de enviar o pacote para um serviço de indexação como o PyPi.

Pelo que eu não sei, algum distribuidor de software não faz upload de seu pacote para o PyPi, em vez de pedir aos desenvolvedores que baixem o pacote de seu site e instalem.

python setup.py install

Isso pode funcionar, mas não é recomendado. Não é necessário desembrulhar o arquivo tarball e acessá-lo para executar o arquivo setup.py.

pip install ../path/to/packagename.tar.gz

Esta é a forma desenhada e preferida. Conciso e alinhado com pacotes de estilo PyPi.

Mais informações sobre pip installpodem ser encontradas aqui: https://pip.readthedocs.io/en/stable/reference/pip_install/


Podemos usar pip install -e?
variável de
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.