Python tem uma história confusa, de ferramentas que podem ser utilizadas para embalar e descrever projetos: estes incluem distutilsna biblioteca padrão, distribute, distutils2, e setuptools(e talvez mais). Parece que distributee distutils2foram descontinuados em favor de setuptools, o que deixa dois padrões concorrentes.
No meu entender, setuptoolsoferece 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
setuptoolspara definir projetos e criar distribuições de origem.
E explica:
Embora você possa usar pure
distutilspara 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),setuptoolsserá 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 distutilse aqueles que suportam setuptoolsfrequentemente se misturam setuptoolscom, distutilspor 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 setuptoolse distutils. Isso geralmente inclui várias formas de verificação de dependência propensa a erros, pois distutilsnã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 setuptoolsnão estar na biblioteca padrão é o único motivo? Quais são as vantagens distutilse existem desvantagens de gravar arquivos setup.py que suportam apenas setuptools.
setuptoolsé uma alternativa aprimorada, distutilsmas observe que " O instalador recomendado do pip executa todos os scripts setup.py setuptools, mesmo que o próprio script seja importadodistutils " ( origem )
distutilsfoi mesclado novamentesetuptools, mas há aplicativos herdados que foram gravados para usodistutilse há custos envolvidos na migração para corrigir os padrões.