Python tem uma história confusa, de ferramentas que podem ser utilizadas para embalar e descrever projetos: estes incluem distutils
na biblioteca padrão, distribute
, distutils2
, e setuptools
(e talvez mais). Parece que distribute
e distutils2
foram descontinuados em favor de setuptools
, o que deixa dois padrões concorrentes.
No meu entender, setuptools
oferece muito mais opções (por exemplo, declarar dependências, testes etc.) do que distutils
, no entanto, ainda não está incluído na biblioteca padrão do Python (ainda?).
O Guia do Usuário do Python Packaging [ 1 ] recomenda agora:
Use
setuptools
para definir projetos e criar distribuições de origem.
E explica:
Embora você possa usar pure
distutils
para muitos projetos, ele não suporta a definição de dependências em outros projetos e faltam vários utilitários de conveniência para preencher automaticamente os metadados do pacote corretamente fornecidos porsetuptools
. Estando fora da biblioteca padrão, o setuptools também oferece um conjunto de recursos mais consistente em diferentes versões do Python e (ao contráriodistutils
),setuptools
será atualizado para produzir os próximos formatos padrão "Metadados 2.0" em todas as versões suportadas.Mesmo para projetos que optam por usar
distutils
, quando o pip instala esses projetos diretamente da fonte (em vez de instalar a partir de um arquivo de roda pré-construído), ele realmente cria seu projeto usandosetuptools
.
No entanto, examinar vários arquivos setup.py do projeto revela que esse não parece ser um padrão real. Muitos pacotes ainda usam distutils
e aqueles que suportam setuptools
frequentemente se misturam setuptools
com, distutils
por exemplo, fazendo uma importação de fallback:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Seguido de uma tentativa de encontrar uma maneira de escrever uma configuração que pode ser instalada por ambos setuptools
e distutils
. Isso geralmente inclui várias formas de verificação de dependência propensa a erros, pois distutils
não suporta dependências na função de configuração.
Por que as pessoas ainda estão fazendo um esforço extra para apoiar distutils
- o fato de setuptools
não estar na biblioteca padrão é o único motivo? Quais são as vantagens distutils
e existem desvantagens de gravar arquivos setup.py que suportam apenas setuptools
.
distutils
foi mesclado novamentesetuptools
, mas há aplicativos herdados que foram gravados para usodistutils
e há custos envolvidos na migração para corrigir os padrões.setuptools
é uma alternativa aprimorada,distutils
mas observe que " O instalador recomendado do pip executa todos os scripts setup.pysetuptools
, mesmo que o próprio script seja importadodistutils
" ( origem )Respostas:
Dê uma olhada nesta questão SO. Ele explica todos os métodos de embalagem muito bem e pode ajudar a responder sua pergunta em certa medida: Diferenças entre distribuir, distutils, setuptools e distutils2?
Portanto, como você pode ver, as ferramentas de configuração devem ser preferidas aos distutils, e eu vejo de onde vem sua pergunta, mas não vejo distutils perdendo suporte tão cedo, pois, simplesmente, é usado em muitos casos com alguns programas legados populares . E como você provavelmente sabe que mudar esse tipo de coisa em programas herdados pode ser bastante doloroso e apresentar muitos problemas, por exemplo, incompatibilidades, o que levaria o desenvolvedor a reescrever o código-fonte. Portanto, existe isso e também o fato de o distutils fazer parte da biblioteca python padrão, enquanto o setuptools não é. Portanto, se você estiver criando um programa python, hoje em dia, use setuptools, no entanto, lembre-se de que, sem distutils, eles nunca teriam existido.
fonte
Essa é uma razão. O seguinte é direto do NumPy
setup.py
:Então, o NumPy prefere
setuptools
se pode encontrá-lo. Mas o SciPy costumava fazer isso, até que foi corrigido para preferirdistutils
em algumas situações. Citando o log de confirmação:Obviamente, uma fusão entre
setuptools
edistribute
deve resolver tudo isso no devido tempo, mas muitos pacotes ainda precisam oferecer suporte às instalações do Python 2.6.fonte
distribute
foi um garfosetuptools
e agora é fundido novamente.Existem várias razões pelas quais ainda falamos e usamos distutils, embora o setuptools seja sem dúvida o melhor conjunto de ferramentas.
Em primeiro lugar, o distutils está disponível em qualquer lugar. Se você deseja criar um módulo para compartilhar com outras pessoas e não possui requisitos complicados, é garantido que ele esteja disponível em sua máquina de trabalho. Isso é particularmente importante se você precisar oferecer suporte a versões mais antigas do python ou se estiver trabalhando em um ambiente desconhecido.
Em segundo lugar, o setuptools fornece aprimoramentos para distutils. É, portanto, modelado após o conjunto de ferramentas distutils e leva toda a sua estrutura a partir daí. A documentação para setuptools pressupõe que o leitor esteja familiarizado com distutils e apenas documenta como ele aprimora o conjunto de ferramentas base. Você pode pensar que o distutils define o dialeto e as ferramentas de configuração aprimoram esse dialeto.
Minha abordagem pessoal para novos projetos começa com a suposição de que vou usar distutils. Somente à medida que o projeto cresce para exigir um recurso de setuptools, eu faço a atualização. O setuptools é um substituto para distutils, é uma alteração de uma linha no meu setup.py.
fonte
Basicamente, é devido à divisão de responsabilidades.
setuptools
não faz parte da biblioteca padrão do Python porque é mantida por terceiros e não pela equipe principal do Python. O que significa, entre outras coisas:Efetivamente, a equipe principal reduziu o escopo dos distutils , reservando as partes "padrões básicos" e "compilação mínima necessária" para si , deixando todo o material além disso (compilador estendido / formato de pacote / qualquer outro suporte) para terceiros. O código que anteriormente cobria essas "partes estendidas" foi deixado obsoleto para compatibilidade com versões anteriores.
Da distribuição de módulos Python - documentação do Python 2.7.12 :
Também é provável que os pacotes para outros sistemas operacionais forneçam
setuptools
epip
separadamente - pelas razões acima mencionadasfonte